为R中的行值集群分配ID

时间:2017-05-21 21:16:08

标签: r cluster-computing uniqueidentifier

我是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

如果有人能够对此有所了解,我将非常感激。非常感谢。

2 个答案:

答案 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