【问题标题】:How to summarize multiple files into one file based on an assigned rule?如何根据分配的规则将多个文件汇总为一个文件?
【发布时间】:2011-09-01 11:21:26
【问题描述】:

我有~100个以下格式的文件,每个文件都有自己的文件名,但是所有这些文件都保存在同一个目录中,比如说filecd如下:

   A    B    C    D
ab 0.3  0.0  0.2  0.20
cd 0.7  0.0  0.3  0.77
ef 0.8  0.1  0.5  0.91
gh 0.3  0.5  0.6  0.78

fileabb如下:

   A    B    C    D
ab 0.3  0.9  1.0  0.20
gh 0.3  0.5  0.6  0.9

所有这些文件的列数相同,但行数不同。

对于每个文件,我想将它们总结为一行(0 表示同一列中的所有单元格

        A B C D    
filecd  1 0 0 1
fileabb 0 1 1 1
..... till 100

不是读取文件并分别处理每个文件,而是可以由 R 有效地完成吗?你能给我帮助吗?谢谢。

为了便于讨论。我为示例输入文件添加了以下几行:

file1 <- data.frame(A=c(0.3, 0.7, 0.8, 0.3), B=c(0,0,0.1,0.5), C=c(0.2,0.3,0.5,0.6), D=c(0.2,0.77,0.91, 0.78))

file2 <- data.frame(A=c(0.3, 0.3), B=c(0.9,0.5), C=c(1,0.6), D=c(0.2,0.9))

请多多指教。非常感谢。

【问题讨论】:

  • 到目前为止您尝试过什么?你在哪里卡住了?
  • 您的文件似乎也不是 csvs。更像是固定宽度?
  • @Andrie 我还不能让它工作。
  • @Nick,没有所有文件都是 csv 格式。只是我无法使用此消息附加文件。为了便于讨论,我编辑了问题以包含示例输入文件。

标签: r csv


【解决方案1】:

首先制作一个包含所有文件名的向量。

filenames <- dir(your_data_dir)  #you may also need the pattern argument

然后将数据读入数据框列表。

data_list <- lapply(filenames, function(fn) as.matrix(read.delim(fn))) 
#maybe with other arguments passed to read.delim

现在计算摘要。

summarised <- lapply(data_list, function(dfr)
{
  apply(x, 2, function(row) any(row >= 0.8))
})

将此列表转换为矩阵。

summary_matrix <- do.call(rbind, summarised)

使行名与文件匹配。

rownames(summary_matrix) <- filenames

现在写入 CSV。

write.csv(summary_matrix, "my_summary_matrix.csv")

【讨论】:

  • 对不起,我发现我还不能让它工作,你能不能再给我一些指导? > 文件名 data_list > 摘要 = 0.8)) + }) > > do.call(rbind, summarised) Name A B C D [1,] TRUE TRUE TRUE TRUE TRUE [2,] TRUE TRUE TRUE对对对
  • 它在什么时候失败了,您确定之前的所有步骤都会产生您所期望的结果(例如,您是否检查过 data_list 的内容确实是正确的矩阵列表格式)?
猜你喜欢
  • 2012-07-04
  • 2011-12-25
  • 1970-01-01
  • 2019-09-23
  • 1970-01-01
  • 1970-01-01
  • 2021-03-26
  • 2015-09-03
相关资源
最近更新 更多