问题描述
我想按行和列汇总数据帧A,B和C,以获得D。
A <- data.frame(A = c("John","Fred","Paul"),Money = c(5,20,10),Hats = c(1,2,2))
B <- data.frame(A = c("John","Fred"),Money = c(15,2))
C <- data.frame(A = c("Paul"),Money = c(20),Hats = c(1))
D <- data.frame(A = c("John",Money = c(20,30,30),Hats = c(2,3,3))
这是R中最快的方法吗?
解决方法
您可以这样做:
aggregate(.~A,do.call(rbind,list(A,B,C)),sum)
A Money Hats
1 Fred 30 4
2 John 20 2
3 Paul 30 3
或者简单地
aggregate(.~A,rbind(A,C),sum)
A Money Hats
1 Fred 30 4
2 John 20 2
3 Paul 30 3
,
使用dplyr:
df_filtered <- tidyr::gather(your_df,value = Value,key = ColumnNames,dplyr::starts_with('X')) %>%
dplyr::filter( ColumnNames == "X1" & Value == 5.2 |
ColumnNames == "X2" & Value == 6.3 |
ColumnNames == "X3" & Value == 7.1 )