如何根据分配的规则将多个文件汇总到一个文件中?

时间:2011-09-01 11:21:26

标签: r csv

我有以下格式的~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都是< 0.8;同一列中任何一个单元格的值大于或等于0.8),并且汇总了结果将保存在单独的csv文件中,如下所示:

        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))

请给我一些建议。非常感谢。

1 个答案:

答案 0 :(得分:2)

首先制作所有文件名的矢量。

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与文件匹配。

rownames(summary_matrix) <- filenames

现在写出CSV。

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