我知道之前已经问过这个问题,但以前的帖子的答案似乎无法解决我的问题 .
我有几十个制表符分隔的.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)没有帮助 .
我希望这能解决问题 .
2 回答
这个问题可以通过两个步骤解决:
Step 1. 将csv文件中的数据读入数据框列表,其中
files
是文件名的向量 . 如果需要为read.csv
添加额外的参数,请添加它们,如下所示 . 有关详细信息,请参见?lapply
.Step 2. 计算每个数据框的均值:
当然,您可以像这样一步完成:
我想你想要这样的smth:
然后,您可以执行任何您喜欢的"by"类型的操作 . 此外,不要忘记调整各种
read.csv
选项以满足您的需求 .例如 . 完成上述操作后,您可以执行以下操作(以及更多):
一个小注意事项:您也可以使用
data.table
的fread
来读取文件而不是read.table
及其衍生物,这样会快得多,而且当我们使用它时,请使用rbindlist
而不是do.call(rbind,
.