当x中的0为奇数时,如何将此零和下一个零之间的id值分配给新变量ref

当x中的0为奇数时,如何将此零和下一个零之间的id值分配给新变量ref,r,R,当x中的0为奇数时,如何将此零和下一个零之间的id值分配给新变量ref 结果如下: 使用data.table的选项 使用data.table的选项 假设一开始你有30岁,这会发生什么变化。另外,对于第一种情况,有两个零,因此不清楚是否只取最后一行?假设开始处有30,这将如何变化。另外,对于第一种情况,有两个零,因此不清楚您是否只取最后一行?很好,非常感谢。很好,非常感谢。 x<-c(0,0,1,1,0,1,1,1,0,1,1,0,1,1) aaa<-data.frame(x) aaa

当x中的0为奇数时,如何将此零和下一个零之间的id值分配给新变量ref

结果如下:

使用data.table的选项

使用data.table的选项


假设一开始你有30岁,这会发生什么变化。另外,对于第一种情况,有两个零,因此不清楚是否只取最后一行?假设开始处有30,这将如何变化。另外,对于第一种情况,有两个零,因此不清楚您是否只取最后一行?很好,非常感谢。很好,非常感谢。
x<-c(0,0,1,1,0,1,1,1,0,1,1,0,1,1)
aaa<-data.frame(x)
aaa$id<-1:nrow(aaa)
library(data.table)
i1 <- setDT(aaa)[, grp := rleid(x)][, .I[seq_len(.N) == .N  & x==0], grp]$V1
i2 <- unlist(lapply(split(i1, as.integer(gl(length(i1), 2, 
          length(i1)))), function(x) head(x[1]:x[2],-1)))
aaa[!i2, ref := id][, grp := NULL][]
#    x id ref
# 1: 0  1   1
# 2: 0  2  NA
# 3: 1  3  NA
# 4: 1  4  NA
# 5: 0  5   5
# 6: 1  6   6
# 7: 1  7   7
# 8: 1  8   8
# 9: 0  9  NA
#10: 1 10  NA
#11: 1 11  NA
#12: 0 12  12
#13: 1 13  13
#14: 1 14  14
aaa$ref <- with(aaa, ifelse(cumsum(x == 0) %% 2, id, NA))

aaa
#    x id ref
# 1  0  1   1
# 2  0  2  NA
# 3  1  3  NA
# 4  1  4  NA
# 5  0  5   5
# 6  1  6   6
# 7  1  7   7
# 8  1  8   8
# 9  0  9  NA
# 10 1 10  NA
# 11 1 11  NA
# 12 0 12  12
# 13 1 13  13
# 14 1 14  14