【发布时间】:2013-05-02 18:08:33
【问题描述】:
我知道之前有人问过这个问题,但之前帖子的答案似乎无法解决我的问题。
我有几十个制表符分隔的 .txt 文件。每个文件有两列(“pos”、“score”)。我想将所有“分数”列编译到一个包含多个列的文件中。每个文件的行数不同,与编译无关。
如果有人可以指导我如何实现这一点,最好是在 R 中,那将很有帮助。
或者,我的最终目标是从每个文件中读取“分数”列的中位数和平均值。因此,如果可以实现这一点,无论是否编译文件,都会更有帮助。
谢谢。
更新:
尽管个人密码忍者的想法很吸引人,但我知道这仍然是一个幻想。抱歉没有说清楚。
我尝试过 lapply 和 Reduce,例如,
> files <- dir(pattern="X.*\\.txt$")
> File_list <- lapply(filesToProcess,function(score)
+ read.table(score,header=TRUE,row.names=1))
> File_list <- lapply(files,function(z) z[c("pos","score")])
> out_file <- Reduce(function(x,y) {merge(x,y,by=c("pos"))},File_list)
考虑到我有可变的行号,我知道这并没有什么意义。我也试过 plyr
> files <- list.files()
> out_list <- llply(files,read.table)
还有 cbind 和 rbind。通常我会收到一条错误消息,因为行号不匹配,或者我只是将所有“分数”数据编译到一列中。
关于类似帖子(例如Merging multiple csv files in R、Simultaneously merge multiple data.frames in a list 和Merge multiple files in a list with different number of rows)的建议没有帮助。
我希望这可以解决问题。
【问题讨论】:
-
Stephan - 你能告诉我们你以前尝试过什么,什么没用吗?您的问题可以很容易地在 R 中解决,但如前所述,它非常模糊。 SO 用户不是为你编写代码的个人代码忍者。
-
?合并。设置 all = FALSE (默认)如何不做你想要的?
-
@Jake 要合并文件,我必须一个一个地列出它们,这是我试图避免的。
-
您可以使用带有
merge()的循环。 -
我不明白你为什么使用
merge。那是一个数据库JOIN。根据您的描述,您可能会使用cbind.data.frame(但前提是它们的行数相同)或者rbind.data.frame之前添加了一个原始文件列。如果您将数据保留为“长”形式而不是并排放置列,则 R 中的大多数分析都会进行得更顺利。