我有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
谢谢!
答案 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