【问题标题】:Merging multiple dataframes and summing duplicate columns合并多个数据框并对重复列求和
【发布时间】:2016-03-23 22:34:48
【问题描述】:

我花了很多时间环顾四周,但找不到解决我的具体问题的方法。非常感谢任何帮助。

我有一个 csv 文件列表,这些文件都有一个包含物种名称的列(在下面的示例中标题为“行”)。每个 csv 文件还具有一系列样本,其中一些在所有 csv 文件中是唯一的,其中一些存在于许多 csv 文件中。我正在寻找一种将所有这些 csv 文件合并到“Row”变量上的方法,同时也将出现在多个 csv 文件中的任何样本相加。

举个例子:

dfrm_1 <- data.frame(a = c("species1", "species2", "species3", "species9"), b= c(100,5,24,100), c=c(52,151,15,100))
dfrm_2 <- data.frame(a = c("species2", "species4", "species6", "species9"), b= c(4,2,500,100), c=c(67,98,153,100))
names(dfrm_1) <- c("Row", "S1", "S2")
names(dfrm_2) <- c("Row", "S2", "S4")

mDF <- merge(dfrm_1, dfrm_2, by="Row", all=TRUE)

当两个数据帧合并时,样本 2(S2,存在于两个数据帧中)变为 S2.x 和 S2.y。而不是添加字母后缀的合并函数,我只想对两列求和。

想要的输出是:

df_merge <- data.frame(a=c("species1", "species2", "species3", "species9", "species4", "species6"), b=c(100,5,24,100,0,0), c=c(52,155,15,200,2,500), d=c(0,67,0,100,98,153))
names(df_merge) <- c("Row", "S1", "S2", "S4")

注意:已编辑以扩展示例并包含所需的输出

【问题讨论】:

    标签: r


    【解决方案1】:

    但是,您已经接近了,而不是合并要附加数据的数据。下面的代码会给你你想要的。

    library(dplyr)
    rbind_list(dfrm_1, dfrm_2) %>%
      group_by(Row) %>%
      mutate_each(funs(sum(., na.rm = TRUE))) %>%
      unique()
    

    【讨论】:

    • 我为不够清晰深表歉意,我已经编辑了我的原始问题以提供所需的输出。您在此处的代码非常接近,但是当我在一个具有多个常见物种的扩展示例中尝试它时,它并没有正确地总结它们。例如,在上面更新的示例代码中,species2 的总和正确为 155,但 species9 的总和为 100,而应为 200。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 2018-08-13
    • 2015-03-06
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    • 2019-02-12
    相关资源
    最近更新 更多