提问人:TheBoomerang 提问时间:8/16/2022 最后编辑:s__TheBoomerang 更新时间:8/16/2022 访问量:112
在 r 中使用 mutate 添加观测值的计数/计数
Adding a tally/count of observations using mutate in r
问:
我想知道是否有更有效的方法来向 R 中的数据集添加计数。
使用 mpg 数据集,这就是我以 mpg 数据集为例的方式。
mpg %>%
group_by(manufacturer) %>%
count() %>%
right_join(
mpg
)
因此,从本质上讲,我想要计算制造商列中唯一观测值的数量。 它工作正常,因为这是一个相当小的数据集,但我正在处理具有超过 100k 个观测值的数据集,并希望找到一种比以这种方式加入更好的方法。
为了提供背景信息,将唯一观测值的数量用作后续分析的分母。
答:
3赞
s__
8/16/2022
#1
如果你想走得快,你可以试试:data.table
library(data.table)
res <- data.table(mpg)[,':='(cnt = .N), by = manufacturer]
res
manufacturer model displ year cyl trans drv cty hwy fl class cnt
1: audi a4 1.8 1999 4 auto(l5) f 18 29 p compact 18
2: audi a4 1.8 1999 4 manual(m5) f 21 29 p compact 18
3: audi a4 2.0 2008 4 manual(m6) f 20 31 p compact 18
4: audi a4 2.0 2008 4 auto(av) f 21 30 p compact 18
5: audi a4 2.8 1999 6 auto(l5) f 16 26 p compact 18
---
230: volkswagen passat 2.0 2008 4 auto(s6) f 19 28 p midsize 27
231: volkswagen passat 2.0 2008 4 manual(m6) f 21 29 p midsize 27
232: volkswagen passat 2.8 1999 6 auto(l5) f 16 26 p midsize 27
233: volkswagen passat 2.8 1999 6 manual(m5) f 18 26 p midsize 27
234: volkswagen passat 3.6 2008 6 auto(s6) f 17 26 p midsize 27
基准测试(使用@phiver不错的解决方案):
library(dplyr)
library(microbenchmark)
microbenchmark(dplyr = mpg %>% group_by(manufacturer) %>% add_tally() ,
data.table = data.table(mpg)[,':='(cnt = .N), by = manufacturer])
Unit: milliseconds
expr min lq mean median uq max neval
dplyr 8.201807 8.557434 9.599122 9.018660 9.922339 17.425479 100
data.table 1.245440 1.370666 1.615039 1.470719 1.691733 6.391889 100
评论
mpg %>% group_by(manufacturer) %>% add_tally()