首页 > 解决方案 > 在 R 中按两个变量分组的最佳方法是什么?

问题描述

在以下称为“contribs”的 DF 中,有没有一种方法可以根据状态快速计算金额列中的总和?也就是 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)

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

标签: rgrouping

解决方案


我们可以使用aggregatefrom base R。由于只有三列,其余两列可以.在公式方法中指定

aggregate(amount ~ ., contribs, sum)

或者基于另一个选项,它对于ing 和创建/修改列dplyr将更加灵活summarisemutate

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)]

推荐阅读