R:在具有不同维度的2个数据框中添加值

时间:2015-07-16 17:11:33

标签: r

我有2个数据帧:

df1 :( 3行,3列)

Type     CA     AR     OR   Total
alpha    2      3      1      6
beta     1      5      2      8
delta    8      1      1      10

df2 :( 4行,2列)

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

我想在两个数据帧中添加值。结果如下: 我尝试了df1 + df2,但我遇到的问题是这两个数据框的尺寸/尺寸不同。是否有任何类型的函数可以让我添加具有相同行/列名称的行/列(某种匹配函数来匹配名称。)如果没有出现值(在这种情况下) - > gamma,OR,我希望它打印0 / NA - >我不在乎实际上是什么。) 我需要进行某种匹配而不是硬编码,因为我会为几个表做这个。

Type     CA     AR       OR   Total
alpha    5      7        1     13
beta     3      11       2     16
gamma    9      1        0     10
delta    12     2        1     15

谢谢!

3 个答案:

答案 0 :(得分:3)

我个人会使用熔化/铸造整形策略

library(reshape2)
melted <- rbind(melt(df1), melt(df2))
dcast(melted, Type~variable, sum)

#    Type CA AR OR Total
# 1 alpha  5  7  1    13
# 2  beta  3 11  2    16
# 3 delta 12  2  1    15
# 4 gamma  9  1  0    10

答案 1 :(得分:1)

使用sqldf

library(sqldf)
sqldf('SELECT Type, sum(CA) CA, sum(AR) AR, sum ([OR]) [OR], sum(Total) Total 
      FROM (SELECT Type, CA, AR, [OR], Total FROM df1
      UNION ALL
      SELECT Type, CA, AR, Null as [OR], Total FROM df2) 
      GROUP by Type')

输出:

   Type CA AR OR Total
1 alpha  5  7  1    13
2  beta  3 11  2    16
3 delta 12  2  1    15
4 gamma  9  1 NA    10

答案 2 :(得分:0)

另一种方法是安装包plyr,这将允许您使用不需要相同列的rbind.fill函数。聚合函数将对您的值求和。

install.packages("plyr")
data<-rbind.fill(df1,df2)
data[is.na(data)]<-0
aggregate(data[c("CA","AR","OR","Total")],by=data["Type"], FUN = sum) 


   Type CA AR OR Total
1 alpha  5  7  1    13
2  beta  3 11  2    16
3 delta 12  2  1    15
4 gamma  9  1  0    10