根据值的每个新实例分配唯一的ID,并为后续的重复值分配相同的ID

时间:2018-11-30 20:10:59

标签: r

希望在R中执行类似的操作,但是需要在每个新的'1'实例之后为后续的'0'值分配相同的值。所以我的数据看起来像这样:

Val
  1
  0
  0
  0
  1
  0
  1
  0
  0 
  0
  0

,并且需要分配唯一的ID,如下所示:

 Val  ID
  1    1
  0    1
  0    1
  0    1
  1    2
  0    2
  1    3
  0    3
  0    3
  0    3
  0    3

2 个答案:

答案 0 :(得分:2)

使用-

_Imaginary

输出

df$ID <- cumsum(df$Val)

答案 1 :(得分:0)

使用dplyrzoo

df %>%
 group_by(Val) %>% #Grouping by Val
 mutate(temp = ifelse(Val == 0, NA, sequence(n()))) %>% #Assigning NA if Val is zero, otherwise creating a sequence around the ones
 ungroup() %>%
 mutate(ID = na.locf(temp)) %>% #Filling the NAs with the last non-NA case
 select(-temp)

     Val   ID
   <int> <int>
 1     1     1
 2     0     1
 3     0     1
 4     0     1
 5     1     2
 6     0     2
 7     1     3
 8     0     3
 9     0     3
10     0     3
11     0     3