每次在r中发生事件时分配编号

时间:2016-12-22 10:56:20

标签: r

我有这些数据:

t <- c(NA,NA,NA,1,NA,NA,NA,NA,1,NA,1)
dt <- data.table(t)

     t
 1: NA
 2: NA
 3: NA
 4:  1
 5: NA
 6: NA
 7: NA
 8: NA
 9:  1
10: NA
11:  1

每次在t列中出现1时,是否可以创建新列z并按升序分配数字,以获得此结果:

     t  z
 1: NA NA
 2: NA NA
 3: NA NA
 4:  1  1
 5: NA NA
 6: NA NA
 7: NA NA
 8: NA NA
 9:  1  2
10: NA NA
11:  1  3

谢谢

3 个答案:

答案 0 :(得分:3)

我们可以在'i'中创建非NA元素的逻辑索引,并将('z')指定为't'的序列

dt[!is.na(t), z := seq_along(t)]
dt
#     t  z
# 1: NA NA
# 2: NA NA
# 3: NA NA
# 4:  1  1
# 5: NA NA
# 6: NA NA
# 7: NA NA
# 8: NA NA
# 9:  1  2
#10: NA NA
#11:  1  3

答案 1 :(得分:1)

t == 1的

子集并取累积和

  dt[t==1, z := cumsum(t)]

答案 2 :(得分:0)

library(dplyr)

df <- data.frame(t = c(1, NA, 1, NA, 1, NA, NA)) df %>% group_by(t) %>% mutate(z = cumsum(t))