r - 在 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)
然后我对数据中的每个状态都这样做,并将结果放在一个数据框中,但是有没有更有效的方法来做到这一点?
解决方案
我们可以使用aggregate
from base R
。由于只有三列,其余两列可以.
在公式方法中指定
aggregate(amount ~ ., contribs, sum)
或者基于另一个选项,它对于ing 和创建/修改列dplyr
将更加灵活summarise
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)]
推荐阅读
- android - Android AudioTrack 是否使用自动缓冲?
- azure - ADFv2 SSIS-IR 和 DB2 驱动程序 IBM DB2 ODBC 驱动程序 - DB2COPY1。预验证中的 SSIS 包意外终止
- javascript - 自动完成 Ajax 键始终未定义
- sql - 设置一个计数器 sql
- python - raise ValueError('无法设置没有定义索引的框架' ValueError:
- java - 在java中合并两个具有相同键的地图
- android-studio - Android Studio Profiler 在 ubuntu 16.04 中非常滞后
- android - 如何使用 jks 文件更新 Android 应用程序?
- c# - SonarQube 分析任务更改构建的输出
- javascript - 是否可以制作一个触发 PWA“添加到主屏幕”安装横幅的应用内按钮?