【问题标题】:Average of multiple data frames in R having same column patternR中具有相同列模式的多个数据帧的平均值
【发布时间】:2020-12-22 15:38:18
【问题描述】:

我有多个数据帧或文件,我想获取每个数据帧中列的平均值并将它们写回。

我所有数据帧的模式。所以这就是我所有文件的列标题的命名方式。

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"

我正在获取每个数据帧的平均值,然后将其转租。

阅读后需要做的步骤,我理解的就是这个。

  • 读取文件夹中的所有文件
  • 将它们列成一个列表。
  • 可能把使用函数加入到列表中。

但我可以读取文件并获得一个列表,但我不确定如何将我为单个数据帧计算的高于平均值的平均值应用到我的列表中并执行相同操作。

任何帮助将不胜感激。

【问题讨论】:

    标签: r average


    【解决方案1】:

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

    【讨论】:

    • 工作得很好。现在我试图通过这个 [for(i in 1:length(result)){ results = as.data.frame(result[[i]]) 写回结果write.table(results,file=paste0(i,"a_"),sep = "\t",quote = FALSE,row.names = FALSE,col.names = TRUE) }] 。如何通过您从文件夹中读取的名称保存结果..现在我使用前缀“a_”我想将它们保存为我读取它们的相同名称是可​​能的吗?
    • 查看更新的答案。这将在您的工作目录中写入所有带有result_ 文件名的文件。
    • 航空公司看到了您的答案,现在就在行动中
    • 除了使用 paypal 之外,如何支持你 ..你的答案的忠实粉丝 ..因为我没有 paypal ..还有其他方式来表达我对你的支持吗?
    • “很高兴我的回答对您有所帮助。”我会花几天时间来弄清楚这一点,但仍然无法得出你给出的答案。作为生物学家,我的编程技能非常幼稚。我寻找可以给我正确答案的方法,有时是由于缺乏在我的编程技能中,我必须走更长的路。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    相关资源
    最近更新 更多