我有这些数据:
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
谢谢
答案 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)
子集并取累积和
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))