【问题标题】:R: Adding two dataframes (different number of rows)R:添加两个数据框(不同的行数)
【发布时间】:2015-05-31 08:53:49
【问题描述】:

我有一个数据框(df1):

Type     CA     AR     Total
alpha    2      3        5
beta     1      5        6
gamma    6      2        8
delta    8      1        9

我有另一个数据框 (df2)

Type     CA     AR     Total
alpha    3      4        7
beta     2      6        8
delta    4      1        5

如何将以上两个数据框相加得到如下输出:

Type     CA     AR     Total
alpha    5      7        12
beta     3      11       14
gamma    6      2        8
delta    12     2        14

如果我使用这一行的代码:

new_df = df1 + df2

我收到以下错误:

‘+’ only defined for equally-sized data frames

如何添加两个数据框,也许通过匹配“类型”列下的名称?

提前致谢!!

【问题讨论】:

  • df1[df1$Type %in% df2$Type, ] + df2[df2$Type %in% df1$Type, ] 已经完成了一半。然后考虑一个 rbind。
  • 你的列也不匹配——有问题吗?
  • 假设您想将 CA 值添加到 CA 值(在您想要的输出中似乎不是这种情况,但我不确定这是否是一个错误),那么答案我给你的last question 将使用不相等的行数。

标签: r


【解决方案1】:

(由于aggregate() 按分组列对输出进行排序的行为,行略有乱序,但数据正确。)

df1 <- data.frame(Type=c('alpha','beta', 'gamma','delta'), CA=c(2,1,6,8), AR=c(3,5,2,1), Total=c(5,6,8,9) );
df2 <- data.frame(Type=c('alpha','beta','delta'), AR=c(3,2,4), CA=c(4,6,1), Total=c(7,8,5) );
aggregate(.~Type,rbind(df1,setNames(df2,names(df1))),sum);
##    Type CA AR Total
## 1 alpha  5  7    12
## 2  beta  3 11    14
## 3 delta 12  2    14
## 4 gamma  6  2     8

【讨论】:

    【解决方案2】:

    库(dplyr)

    rbind(df1,df2)%>%group_by(Type)%>%summarise_each(funs(sum))
    

    【讨论】:

    • 这不会产生 OP 给出的输出
    猜你喜欢
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 2022-01-25
    • 2017-04-26
    • 1970-01-01
    相关资源
    最近更新 更多