Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据数据表(R)列中的更改值对组进行编号_R_Data.table - Fatal编程技术网

根据数据表(R)列中的更改值对组进行编号

根据数据表(R)列中的更改值对组进行编号,r,data.table,R,Data.table,我想用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 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


有人能帮我吗?

我们可以使用
rleid
来表示
备注
,因此每次更改都被视为一个新的组

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

我们可以将
rleid
用于
备注
,因此每次更改都被视为一个新组

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

使用
dplyr
,我们可以使用
cur\u group\u id

library(dplyr)
library(data.table)
test %>% 
     group_by(exo, grp = rleid(remark)) %>%
     mutate(indic_num = cur_group_id()) %>%
     ungroup %>%
     select(-grp)
# A tibble: 7 x 4
#    exo number remark indic_num
#  <dbl>  <dbl> <chr>      <int>
#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

使用
dplyr
,我们可以使用
cur\u group\u id

library(dplyr)
library(data.table)
test %>% 
     group_by(exo, grp = rleid(remark)) %>%
     mutate(indic_num = cur_group_id()) %>%
     ungroup %>%
     select(-grp)
# A tibble: 7 x 4
#    exo number remark indic_num
#  <dbl>  <dbl> <chr>      <int>
#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