在r中使用mutate添加观察结果的计数



我想知道是否有更有效的方法可以在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

最新更新