【发布时间】:2017-08-13 13:05:42
【问题描述】:
我的计算机上有一个目录,里面有大约 1000 个 .txt 文件。每个文件看起来像这样(没有 NA):
`head` 1.txt
M40_A M40_B M40_C M41
K00844 28 20 27 23
K00845 668 649 737 838
K01810 2171 2264 2140 2221
`head` 2.txt
M40_A M40_B M40_C M41
K00844 23 21 22 11
K00845 649 628 708 837
K01810 2121 2326 2162 2255
对于每个文件,所有行名和列名都相同。我要做的是:创建 1 个最终数据帧,在其中我为每个条件(M40_A、M40_B、M40C、M41)的每个 K00XXX 数字(来自所有 .txt 文件)计算平均值(四舍五入)。例如,我的最终 df 如下所示:
`final_df`
M40_A M40_B M40_C M41
K00844 26 21 25 17
K00845 659 639 723 838
K01810 2146 2295 2151 2238
其中,例如,值 26 是 1.txt 和 2.txt 的 M40_A 列、K00844 行的平均值 ((28 + 23)/2 = 26)。我已经搜索了这个网站,并在这里找到了完全相同的帖子: Average multiple csv files into 1 averaged file in r 然而,我多次尝试执行代码时不断给我错误。例如:
`txts <- lapply(list.files(pattern="*.txt"), read.csv)'
将我所有的文件读入一个列表,读入一个奇怪的配置。这是我的结果:
`> txts[1]`
[[1] M40_A.M40_B.M40_C.M41
1 K00844\t28\t20\t27\t23\
2 K00845\t668\t649\t737\t838\
3 K01810\t2171\t2264\t2140\t2221\
当我执行第二个代码时:
`Reduce("+", txts) / length(txts)
它给了我:警告信息:
在 Ops.factor(left, right) 中:“+”对因子没有意义。
更不用说,这并没有取所有 .txts 文件的平均值,因为 R 文档说Reduce 是组合给定向量的元素。
所以,我认为必须有一种不同的方法才能完成这项工作。任何有关如何提出我的final_df 的帮助或见解都会非常有帮助!
【问题讨论】:
-
也许可以试试
txts <- lapply(list.files(pattern="*.txt"), read.csv, sep="\t")。此外,您还可以使用str(txt[[1]])来查看数据的内容/结构。