r-在NA存在的情况下,是否有更好的方法来引入行程长度id



我有这个数据:

df <- data.frame(
Sequ = c(NA, 8, 8, NA, 1, 1, 1, NA, NA, NA, 22, 22, NA),
Q = c(NA, "q_x", "", NA, "q_2", "", "", NA, NA, NA, "q_xyz", "", NA)
)

我想做的是在Sequ中引入一个正确的游程长度id,其中它不是NA。到目前为止,我所做的尝试确实给了我想要的结果,但我觉得必须有一种更好、更高效、更简洁的方法:

cats = c("q_x", "q_2", "q_xyz")
df %>%
mutate(Sequ = cumsum(Q %in% cats)) %>% 
mutate(Sequ = ifelse(is.na(Q), NA, Sequ))
Sequ     Q
1    NA  <NA>
2     1   q_x
3     1      
4    NA  <NA>
5     2   q_2
6     2      
7     2      
8    NA  <NA>
9    NA  <NA>
10   NA  <NA>
11    3 q_xyz
12    3      
13   NA  <NA>

有什么帮助吗?

另一种可能的解决方案,

library(dplyr)
df %>% 
mutate(Sequ = replace(Sequ, !is.na(Sequ), cumsum(grepl('q', Q))[!is.na(Sequ)]))
Sequ     Q
1    NA  <NA>
2     1   q_x
3     1      
4    NA  <NA>
5     2   q_2
6     2      
7     2      
8    NA  <NA>
9    NA  <NA>
10   NA  <NA>
11    3 q_xyz
12    3      
13   NA  <NA>

最新更新