我是R的新手并面临一些确定y长度的问题,直到y = 1发生。 给出样本:
id<-c(1, 1, 1, 1, 1, 1, 1, 2, 2,2,2,2,2,2)
y<-c(0, 0, 0, 0, 1, 0, 1, 1, 0,0,0,0,0,1)
time<-c(1, 2, 3,4, 5, 6, 7, 1, 2,3,4,5,6,7)
数据&LT; -data.frame(ID,Y,时间)
id y time desired lenght
1 0 1 1
1 0 2 2
1 0 3 3
1 0 4 4
1 1 5 1
1 0 6 2
1 1 7 1
2 1 1 1
2 0 2 1
2 0 3 2
2 0 4 3
2 0 5 4
2 0 6 5
2 1 7 1
答案 0 :(得分:3)
y=1
的长度应该是1而不是0,这似乎有点奇怪,但如果这是你想要的,你可以用
data$desired <- unlist(with(rle(data$y),
Map(function(l,v)
if(v==1) rep(1, l) else seq.int(l),
lengths, values))
)
data
# id y time desired
# 1 1 1 1 1
# 2 1 0 2 1
# 3 1 0 3 2
# 4 1 0 4 3
# 5 1 1 5 1
# 6 1 0 6 1
# 7 1 1 7 1
# 8 2 1 1 1
# 9 2 0 2 1
# 10 2 0 3 2
# 11 2 0 4 3
# 12 2 0 5 4
# 13 2 0 6 5
# 14 2 1 7 1