【问题标题】:Is there a better way to introduce run-length id in the presence of NA?有没有更好的方法在存在 NA 的情况下引入运行长度 id?
【发布时间】:2021-11-24 10:57:15
【问题描述】:

我有这些数据:

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>

有什么帮助吗?

【问题讨论】:

    标签: r dplyr run-length-encoding


    【解决方案1】:

    另一种可能的解决方案,

    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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-17
      • 2021-06-02
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多