如何利用collapse包实现分组内carb变量起始为1的索引列?
解决方案
当然可以用collapse包实现这个需求,问题出在你当前使用的groupid(carb)是基于全局的carb值生成索引,而非每个cyl+gear组合组内的独立索引。只需调整groupid的参数,就能让每个分组内的carb索引从1开始:
library(collapse) mtcars |> fsubset(cyl == 4) |> fselect(cyl, gear, carb) |> roworder(cyl, gear, carb) |> fgroup_by(cyl, gear) |> ftransform(id = groupid(carb, .within = TRUE))
关键说明
.within = TRUE参数指定groupid在当前fgroup_by定义的分组(即cyl+gear组合)内计算索引,每个分组内的carb唯一值会从1开始依次编号。- 如果你需要的是类似
data.table::rleidv的连续相同值索引(即连续出现的相同carb值共享同一个索引,值变化时索引递增,且每个分组内重置),可以替换为seqid(carb, .within = TRUE),seqid是collapse中对应rleid功能的函数:
mtcars |> fsubset(cyl == 4) |> fselect(cyl, gear, carb) |> roworder(cyl, gear, carb) |> fgroup_by(cyl, gear) |> ftransform(id = seqid(carb, .within = TRUE))
内容的提问来源于stack exchange,提问作者Rooh
相关产品推荐
相关产品推荐

