当x中的0为奇数时,如何将此零和下一个零之间的id值分配给新变量ref
当x中的0为奇数时,如何将此零和下一个零之间的id值分配给新变量ref 结果如下: 使用data.table的选项 使用data.table的选项当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
假设一开始你有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