首页 > 解决方案 > 根据 data.table (R) 列中的更改值对组进行编号

问题描述

我想用 data.table 做一些非常基本的事情,但我不知道怎么做!

我有这个数据:

test <- data.table(exo = c(1,1,1,1,1,1,1), number = c(1,2,3,4,5,6,7), remark = c("OK","OK","KO","KO","OK","OK","OK"))
  
   exo number remark
1:   1      1     OK
2:   1      2     OK
3:   1      3     KO
4:   1      4     KO
5:   1      5     OK
6:   1      6     OK
7:   1      7     OK
8:   1      8     KO

而且我想对组进行编号(非常简单的形式是test[ , indic_num := .GRP, by = .(exo, remark)]),但是如果我遇到备注更改,我想在 indic_num 中考虑:它是一个新组。

因此,所需的输出:

   exo number remark indic_num
1:   1      1     OK         1
2:   1      2     OK         1
3:   1      3     KO         2
4:   1      4     KO         2
5:   1      5     OK         3
6:   1      6     OK         3
7:   1      7     OK         3
8:   1      8     KO         4

有人可以帮助我吗?

标签: rdata.table

解决方案


我们可以使用rleidforremark所以每次更改都被视为一个新组。

library(data.table)
test[ , indic_num := .GRP, by = .(exo, rleid(remark))]
test

#   exo number remark indic_num
#1:   1      1     OK         1
#2:   1      2     OK         1
#3:   1      3     KO         2
#4:   1      4     KO         2
#5:   1      5     OK         3
#6:   1      6     OK         3
#7:   1      7     OK         3

推荐阅读