ljtl if(T){ library(dplyr) rm(list=ls()) library(data.table) gwas_ukb="E:\\科研相关\\孟德尔随机化\\练习资料\\100580.gwas.imputed_v3.both_sexes.tsv.gz" start_time=Sys.time() ukb=as.data.frame(fread(gwas_ukb)) library(stringr) chr_pos=as.data.frame(str_split(ukb$variant,":",simplify=T)) chr_pos$v5<-paste(chr_pos$v1,chr_pos$v2,sep=":") chr_pos$v6<-paste(chr_pos$v1,chr_pos$v2,chr_pos$v3,chr_pos$v4,sep=":") ukb_clean_no_rsid=dplyr::left_join(chr_pos,ukb,by=c("v6"="variant")) reference=as.data.frame(fread="E:\\科研相关\\孟德尔随机化\\练习资料\\dbSNP151_GRCh37_only_chr_bp_rsID.txt") reference<-tidyr::unite(reference,"chrpos",X,CHROM,POS,sep=":",remove=FALSE) merge=dplyr::left_join(ukb_clean_no_rsid,reference,by=c("v5"="chrpos")) merge=na.omit(merge) merge$eaf<-merge[,"AC"]/(merge[,"n_complete_samples"]*2) merge<-merge[,c(1,2,20,4,3,23,11,14,15,17)] colnames(merge)<-c("CHR","BP","SNP","effect_allele","other_allele","freq","N","Beta","se","pval") head(merge) fwrite( as.data.frame(merge), file="E:\\科研相关\\孟德尔随机化\\练习资料\\100580.gwas.imputed_v3.both_sexes.txt", sep="\t", row.names=F ) + end_time=Sys.time() print(end_time-start_time) } 运行以上代码后提示: Error in $<-.data.frame(*tmp*, v5, value = character(0)) : 替换数据里有0行,但数据有13791467 • 系统环境如下: R version 4.3.2 (2023-10-31 ucrt) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 11 x64 (build 22621) Matrix products: default locale: [1] LC_COLLATE=Chinese (Simplified)China.utf8 LC_CTYPE=Chinese (Simplified)China.utf8 [3] LC_MONETARY=Chinese (Simplified)China.utf8 LC_NUMERIC=C [5] LC_TIME=Chinese (Simplified)China.utf8 time zone: Asia/Shanghai tzcode source: internal attached base packages: [1] stats4 stats graphics grDevices utils datasets methods base other attached packages: [1] Biostrings_2.70.2 GenomeInfoDb_1.38.7 XVector_0.42.0 IRanges_2.36.0 [5] S4Vectors_0.40.2 BiocGenerics_0.48.1 BiocManager_1.30.22 loaded via a namespace (and not attached): [1] zlibbioc_1.48.0 compiler_4.3.2 tools_4.3.2 [4] GenomeInfoDbData_1.2.11 RCurl_1.98-1.14 rstudioapi_0.15.0