在 R 中按两个变量分组的最佳方法是什么?

What's the best way to group by two variables in R?

下面这个DF,叫做“贡献”,有没有办法根据state快速计算amount栏的总和?换句话说,state 列中所有具有 CA 的行,然后是 state 列中具有 NV 的所有行等的总和,类似于 pandas 中的“groupby”方法。

name,state,amount
JASON HOPE,AZ,15000
MONA GIRODET,CA,5000
SHINCHI CHIEN,NV,5000
JEFF KREITZMAN,AZ,5000
GRISELDA KREITZMAN,AZ,5000
BOB DAY,CA,5000
JAMES BRESLO,CA,5000
JOHN SCARDINO,CA,5
JOHN SCARDINO,CA,5000
ANTHONY TESORO,CA,100
ANTHONY TESORO,CA,100
ANTHONY TESORO,CA,5000

这是我一直以来的做法:


ca_contribs <- contribs$state == "CA"
sum(ca_contribs$amount)

然后我对数据中的每个状态都这样做,并将结果放在一个数据框中,但是有没有更有效的方法来做到这一点?

我们可以使用 base R 中的 aggregate。由于只有三列,剩下的两列可以通过公式方法

中的.指定
aggregate(amount ~ ., contribs, sum)

或者另一个选项是基于 dplyr 的,这对于 summariseing 和 creating/modifying 列 mutate

会更灵活
library(dplyr)
contribs %>%
     group_by(name, state) %>%
     summarise(amount = sum(amount, na.rm = TRUE), .groups = 'drop') 

或者可以使用data.table方法来提高效率

library(data.table)
setDT(contribs)[, .(amount = sum(amount, na.rm = TRUE)),.(name, state)]