我有一个 Dataframe “data”,它有一个分组变量“grp”和一个二进制分类变量“classif”。对于grp中的每个组,我想创建一个“result”变量,在classif变量中创建一个0的单独块的索引。目前,我不知道如何为分组变量的每个级别重置计数,也找不到只为0块(忽略1)创建索引的方法。
示例数据:
grp <- c(1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3)
classif <- c(0,1,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0)
result <- c(1,0,2,2,0,3,3,0,0,1,1,1,1,0,2,0,0,0,3,3,0,0,1,1,1,0,2,0,3)
wrong_result <- c(1,2,3,3,4,5,5,1,1,2,2,2,2,3,4,5,5,5,6,6,1,1,2,2,2,3,4,5,6)
Data <- data.frame(grp,classif,result, wrong_result)
我试过使用rleid,但是下面的命令产生了“错误的结果”,这不是我想要的。
data[, wrong_result:= rleid(classif)]
data[, wrong_result:= rleid(classif), by=grp]
2条答案
按热度按时间6ie5vjzr1#
在dplyr中,使用
cumsum()
和lag()
查找.by
组中的零块(确保使用最新版本的dplyr来使用.by
参数)。whhtz7ly2#
使用rle并按顺序对产生的游程编号,然后将1的游程转换回零。不使用任何包。