【问题标题】:Make the leading column value NA if condition is met using R如果使用 R 满足条件,则使前导列值 NA
【发布时间】:2021-12-26 14:27:46
【问题描述】:

我有一个 df,例如

structure(list(id = c(15305, 15305, 15305, 6224, 6224), transfer = c(0, 
1, 0, 1, 0), hosp = c(2182, 2452, 2846, 1474, 1476), out = c(2183, 
NA, 2857, NA, 1486), Insti = c(NA, NA, NA, NA, NA)), class = "data.frame", row.names = c(NA, 
-5L))

如果滞后的“out”和滞后的“Insti”列是 NA 并且“transfer”列 == 1,我想在前导“hosp”列中插入 NA 我希望 df 看起来像这样

structure(list(id2 = c(15305, 15305, 15305, 6224, 6224), transfer2 = c(0, 
1, 0, 1, 0), hosp2 = c(2182, 2452, NA, 1474, NA), out2 = c(2183, 
NA, 2857, NA, 1486), Insti2 = c(NA, NA, NA, NA, NA)), class = "data.frame", row.names = c(NA, 
-5L))

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    您可以使用以下解决方案:

    library(dplyr)
    
    df %>%
      mutate(hosp = case_when(
        is.na(lag(out)) & is.na(lag(Insti)) & lag(transfer) == 1 ~ NA_real_,
        TRUE ~ hosp
      ))
    
         id transfer hosp  out Insti
    1 15305        0 2182 2183    NA
    2 15305        1 2452   NA    NA
    3 15305        0   NA 2857    NA
    4  6224        1 1474   NA    NA
    5  6224        0   NA 1486    NA
    

    【讨论】:

      【解决方案2】:

      要获得“滞后”,您可以删除最后一个值并添加 NA 作为第一个值。这里是使用ifelse 的基本 R 解决方案。

      transform(df,
                hosp=ifelse(is.na(c(NA, out[-nrow(df)])) & is.na(c(NA, Insti[-nrow(df)])) & 
                              c(NA, Insti[-nrow(df)]) == 1, NA,  hosp))
      #      id transfer hosp  out Insti
      # 1 15305        0   NA 2183    NA
      # 2 15305        1 2452   NA    NA
      # 3 15305        0   NA 2857    NA
      # 4  6224        1 1474   NA    NA
      # 5  6224        0   NA 1486    NA
      

      【讨论】:

        猜你喜欢
        • 2020-04-29
        • 1970-01-01
        • 2020-08-18
        • 2020-08-29
        • 1970-01-01
        • 2021-02-09
        • 1970-01-01
        • 1970-01-01
        • 2022-10-07
        相关资源
        最近更新 更多