我正在尝试创建一个基于多个变量的索引列,其行为类似于 rleidv in
data.table
,仅以 mtcars 数据集的几个案例为例
library(collapse)
mtcars |> fsubset(cyl == 4) |>
fselect(cyl, gear, carb) |>
roworder(cyl, gear, carb) |>
fgroup_by(cyl, gear) |>
ftransform(id = groupid(carb))
输出如下
cyl gear carb id
Toyota Corona 4 3 1 1
Datsun 710 4 4 1 1
Fiat 128 4 4 1 1
Toyota Corolla 4 4 1 1
Fiat X1-9 4 4 1 1
Merc 240D 4 4 2 2
Merc 230 4 4 2 2
Honda Civic 4 4 2 2
Volvo 142E 4 4 2 2
Porsche 914-2 4 5 2 2
Lotus Europa 4 5 2 2
我想要实现什么?对于 cyl 和 gear 的每种组合,我想创建一个始终从 1 开始的 carb 变量的索引,所以输出应该是这样的
cyl gear carb id
Toyota Corona 4 3 1 1
Datsun 710 4 4 1 1
Fiat 128 4 4 1 1
Toyota Corolla 4 4 1 1
Fiat X1-9 4 4 1 1
Merc 240D 4 4 2 2
Merc 230 4 4 2 2
Honda Civic 4 4 2 2
Volvo 142E 4 4 2 2
Porsche 914-2 4 5 2 1
Lotus Europa 4 5 2 1
有没有办法做到崩溃?
您需要
fmutate
而不是 ftransform
。在 ?fmutate
的帮助下(由我突出显示):
为了迎合 tidyverse 用户,v1.7.0 引入了 fmutate,提供了熟悉的功能,即按顺序评估参数,分组数据的计算按组完成,并且可以使用 across 将函数应用于多个列。另请参阅详细信息。
library(collapse)
mtcars |> fsubset(cyl == 4) |>
fselect(cyl, gear, carb) |>
roworder(cyl, gear, carb) |>
fgroup_by(cyl, gear) |>
fmutate(id = groupid(carb))
# cyl gear carb id
# Toyota Corona 4 3 1 1
# Datsun 710 4 4 1 1
# Fiat 128 4 4 1 1
# Toyota Corolla 4 4 1 1
# Fiat X1-9 4 4 1 1
# Merc 240D 4 4 2 2
# Merc 230 4 4 2 2
# Honda Civic 4 4 2 2
# Volvo 142E 4 4 2 2
# Porsche 914-2 4 5 2 1
# Lotus Europa 4 5 2 1
# Grouped by: cyl, gear [3 | 4 (3.8) 1-8]