1
私は500個以上のファイル(df1)をフォルダに持っており、参照テーブル(nf1)とマージして新しいファイルを作成したい)。forループと比較して参照データとのマージにより新しいデータフレームを作成
data[1] <- Composite.REF Call Confidence
SNP_A-2131660 2 0.0053
SNP_A-1967418 2 0.0075
SNP_A-1969580 2 0.0042
SNP_A-4263484 2 0.0052
nf1 <-
Composite.REF dbSNP.RS.ID Chromosome Physical.Position Allele.A Allele.B Gene region
SNP_A-2131660 rs4147951 2 66943738 A G ABCA8 intron
SNP_A-1967418 rs2022235 2 14326088 C T --- downstream
SNP_A-1969580 rs6425720 2 31709555 A G NKAIN1 intron
SNP_A-4263484 rs12997193 2 106584554 A C --- upstream
finalFile <-
Composite.REF dbSNP.RS.ID Chromosome Physical.Position Allele.A Allele.B Gene region data[1]
SNP_A-1969580 rs6425720 2 31709555 A G NKAIN1 intron 0.042
listFiles <- list.files(pattern = "data.txt$",recursive=T) # list all the files with extension data.txt
for (i in 1:length(listFiles)){
data<-read.table(file=paste(listFiles[i]), sep="\t", skip=1, header=T)
dataF <-data[data$Confidence < 0.05,] #add a filter
finalFile <- merge(dataF, nf1, by = "Composite.Element.REF") #merge 2 data based on common column
write.table(finalFile, gsub("data.txt", "data_new.txt" ,listFiles[i]), sep = "\t", row.names=F, quote=F) #save the output
}
これは、一度に1つのサンプルをループするので、完了には多くの時間がかかります。私は仕事のためによりエレガントであるかどうかを知りたい。
はあなたの最も遅い部分であるかを確認するためのコードをプロファイリングしようとした持っています仕事? 'read.table'行の場合は' data.table :: fread'を試してみてください。 – bouncyball
read.tableとfreadはほぼ同じ時間がかかります。各ファイルを時間通りにルーピングするのではなく、500個のファイルすべてに対して並列に実行する方法はありますか? – beginner
'plyr'パッケージを使用して、すべてのデータを1つの結合データフレームにロードし、参照と一度マージして、大きなデータフレームのチャンクを別々のファイルに保存することができます。 'adply()'と 'd_ply()'を参照してください。 – jdobres