按组索引并折叠

问题描述 投票:0回答:1

我正在尝试创建一个基于多个变量的索引列,其行为类似于 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

有没有办法做到崩溃?

r r-collapse
1个回答
0
投票

您需要

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] 
© www.soinside.com 2019 - 2024. All rights reserved.