我是R编程新手(我一生都在SAS编程),我认为这是一个我无法找到答案的基本问题(找到类似问题的答案,但不是这个一个)。
想象一下,我们有一个二进制变量(我们称之为“v1”),它的值可以是0或1.我想创建一个新的变量(我们称之为“v2”)每次出现1的新值或在0之后出现1s的字符串时,唯一的集群ID的值。最后,我想从v1创建“v2”,如下所示:
Obs v1 v2
1 0 NA
2 0 NA
3 1 1
4 1 1
5 0 NA
6 1 2
7 0 NA
8 1 3
9 1 3
10 1 3
11 0 NA
12 1 4
如果有人能够对此有所了解,我将非常感激。非常感谢。
答案 0 :(得分:6)
这样就可以了。它将组设置为等于v1值中增加数量的累积和1,然后将0设置回NA。
df$v2 <- cumsum(c(df$v1[1]==1,diff(df$v1)==1))
df$v2[df$v1==0] <- NA
答案 1 :(得分:1)
对于给定的v1
:
v1<-c(0,0,1,1,0,1,0,1,1,1,0,1)
v1_sum <- unlist(lapply(seq_along(1:length(v1)),function(x) sum(v1[1:x])))#create the cumulative sum per index
v1_sum[v1==0] <- NA#imputing NA values to v1_sum when v1 is 0
v1_sum_new_vals <- unlist(lapply(seq_along(1:length(v1_sum)),function(x) {sum(is.na(v1_sum[1:x]))-1}))#cumulative sum of NA's per index
v2 <- ifelse(!is.na(v1_sum),v1_sum_new_vals,v1_sum)#imputing new values based on a condition
将所有收益放在一起
df<-data.frame(v1,v2)
df
v1 v2
1 0 NA
2 0 NA
3 1 1
4 1 1
5 0 NA
6 1 2
7 0 NA
8 1 3
9 1 3
10 1 3
11 0 NA
12 1 4