我想知道是否有更有效的方法可以在R.中向数据集添加计数
使用mpg数据集,我就是这样做的,以mpg数据为例。
mpg %>%
group_by(manufacturer) %>%
count() %>%
right_join(
mpg
)
因此,本质上,我想要在制造商栏中统计独特观察的数量。它运行良好,因为这是一个相当小的数据集,但我正在处理具有超过10万个观测值的数据集。我想找到一种比以这种方式加入更好的方法。
为了给出上下文,使用独特观测值的数量作为后续分析的分母。
如果你想走得快,你可以试试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-nice解决方案(:
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