我想知道是否有更好的方法在数据框中聚合以下系列而不必列出我的数据框X中的所有剩余列:
Date Factor_1 Factor_2 Amount
14-Jan A x 270
14-Jan A z 303
14-Jan A x 547
14-Jan A z 285
14-Jan B j 800
14-Jan B k 697
14-Jan B j 380
14-Jan B k 694
在正常聚合中,聚合的标准方法是:
aggregate(X$Amount, by = list(X$Date, X$Factor_1, X$Factor_2), sum)
是否有办法使用不同的符号进行聚合,例如:
aggregate(X$Amount, by = list(X[,-ncol(X)]), sum)
这个想法太过于避免在大型数据框中输入所有因子,结果仍然是:
Group.1 Group.2 Group.3 Sum
14-Jan A x 817
14-Jan A z 588
14-Jan B j 1180
14-Jan B k 1391
答案 0 :(得分:1)
我们可以使用aggregate
的公式方法。将~
的rhs上的数据集中的所有其他变量指定为.
。
aggregate(Amount~., df1, sum)
# Date Factor_1 Factor_2 Amount
#1 14-Jan B j 1180
#2 14-Jan B k 1391
#3 14-Jan A x 817
#4 14-Jan A z 588
等效的dplyr
方法
library(dplyr)
df1 %>%
group_by_(.dots=names(df1)[-4]) %>%
summarise(Amount= sum(Amount))
并且data.table
方式是
library(data.table)
setDT(df1)[, list(Amount= sum(Amount)), by = c(names(df1)[-4])]