如何使用R的collapse包在分组数据中生成对应组大小的新列
你之前代码的问题出在函数选择上:你调用的大写fNobs默认作用于完整列,不会识别数据框的分组属性,所以返回的是全数据集的行数。改用支持分组上下文的小写fnobs即可实现需求,完全对齐dplyr的输出效果。
正确实现代码
library(collapse) library(ggplot2) library(magrittr) # 写法1:显式分组写法,和dplyr逻辑对齐 res <- mpg %>% fselect(manufacturer) %>% fgroup_by(manufacturer) %>% ftransform(more_than_10_obs = fnobs(manufacturer) > 10)
如果需要单独生成分组大小列,只需要把判断条件去掉即可:
res <- mpg %>% fselect(manufacturer) %>% fgroup_by(manufacturer) %>% ftransform(n_in_group = fnobs(manufacturer))
更高性能的无分组写法
针对超大数据量场景,可以跳过创建分组对象的步骤,直接给fnobs指定g参数传入分组列,性能更强:
res <- mpg %>% fselect(manufacturer) %>% ftransform( n_in_group = fnobs(manufacturer, g = manufacturer), more_than_10_obs = n_in_group > 10 )
你可以用dplyr::all_equal()对比collapse输出和你原dplyr代码的输出,结果完全一致。
内容的提问来源于stack exchange,提问作者Emman
相关产品推荐
相关产品推荐

