我有多个数据框或文件,我想获取每个数据框中列的平均值并将它们写回。
我所有数据帧的模式。所以这就是我所有文件的列标题命名方式。
names(WGCNA_avg_gene)
[1] "Family" "Symbol" "C1_S1_S7" "C1_S3_S9" "C2_S1_S10" "C2_S2_S11" "C3_S1_S13" "C3_S2_S14" "C3_S3_S15"
[10] "C4_S1_S16" "C4_S2_S17" "C4_S3_S18" "C5_S1_S19" "C5_S2_S20" "C5_S3_S21" "C6_S1_S22" "C6_S2_S23" "C6_S3_S24"
到目前为止,我所做的就是这样
WGCNA_avg_gene <- e %>% mutate(C1 = rowMeans(.[grep("C1", names(.))]),
C2 = rowMeans(.[grep("C2", names(.))]),
C3 = rowMeans(.[grep("C3", names(.))]),
C4 = rowMeans(.[grep("C4", names(.))]),
C5 = rowMeans(.[grep("C5", names(.))]),
C6 = rowMeans(.[grep("C6", names(.))]))
names(WGCNA_avg_gene)
one = WGCNA_avg_gene %>% select(Family,Symbol,C1,C2,C3,C4,C5,C6)
names(one)[2] = "Gene"
我正在获取每个数据帧的平均值,然后转租它然后写回。
阅读后需要做的步骤和我的理解是这样的。
但是我可以读取文件并获得一个列表,但我不确定如何将我为单个数据框计算的上述平均值应用到我的列表中并执行相同的操作。
任何帮助将不胜感激。
答案 0 :(得分:2)
用list.files
列出所有要读取的文件,用lapply
读取每个文件,根据列名将它们分成不同的组,并取每一个的平均值。
list_of_files <- list.files('csv/folder/',pattern = '\\.csv$', full.names = TRUE)
lapply(list_of_files, function(x) {
tmp <- read.csv(x)
t1 <- tmp[-(1:2)]
cbind(tmp[1:2], sapply(split.default(t1,
sub('_.*', '', names(t1))), rowMeans, na.rm = TRUE))
}) -> result
如果要将结果写回每个文件的新数据帧。
lapply(list_of_files, function(x) {
tmp <- read.csv(x)
t1 <- tmp[-(1:2)]
result <- cbind(tmp[1:2], sapply(split.default(t1,
sub('_.*', '', names(t1))), rowMeans, na.rm = TRUE))
write.csv(result, paste0('result_', basename(x)), row.names = FALSE)
})