R中具有相同列模式的多个数据帧的平均值

Average of multiple data frames in R having same column pattern

我有多个数据框或文件,我想得到每个 data-frame 中列的平均值并将它们写回。

我所有数据帧的模式。这就是我所有文件的命名方式 header.

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"

我得到每个数据帧的平均值转租它然后写回。

阅读后需要完成的步骤和我的理解是这样的。

但我可以阅读文件并获得列表,但我不确定如何将我为个人 data-frame 计算的高于平均值的值应用到我的列表中并执行相同的操作。

任何帮助将不胜感激。

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