我有以下格式的~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))
请给我一些建议。非常感谢。
答案 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")