【问题标题】:Case_when and or if_else dplyr - when NA use values from another columnCase_when 和或 if_else dplyr - 当 NA 使用来自另一列的值时
【发布时间】:2019-10-20 08:38:49
【问题描述】:

我想使用不同列中的值来替换 NA 值。在此示例中,我的 df 中的最后四个值在“计数”列中有 NA - 我希望将 NA 替换为“值”列中的值。

这是一个虚拟数据集

df <- structure(list(First = structure(c(17995, 17997, 17929, 17919, 
17808, 18031, NA, NA, NA, NA), class = "Date"), Last = 
structure(c(17999, 
17998, 17929, 17919, 17809, 18031, 17965, 17965, 17965, 17965
), class = "Date"), days = c(5, 2, 1, 1, 2, 1, NA, NA, NA, NA
), variable = structure(c(4L, 4L, 4L, 4L, 4L, 4L, 4L, 1L, 2L, 
3L), .Label = c("0-12", "0-25", "0-50", "0-100"), class = "factor"), 
value = c(1, 0, 1, 1, 1, 1, 1, 0, 1, 1), count = c(5, 0, 
1, 1, 2, 1, NA, NA, NA, NA)), class = "data.frame", row.names = c(NA, 
-10L))

关于如何解决它的一些想法....但由于我的编码技能不佳,这不起作用:

 df <- df %>%
 mutate(a = if_else(count == NA, value, if_else(count >=0, count, a)))

或者也许有 case_when 的方法?

谢谢。

【问题讨论】:

  • 如果你想测试一个元素是否是NA,你需要is.na而不是... == NA。试试df %&gt;% mutate(a = replace(count, is.na(count), value[is.na(count)]))
  • 这就是coalesce 的用途。 mutate(a = coalesce(count, value)).

标签: r if-statement dplyr case-when


【解决方案1】:
library(dplyr)
df <- df %>%
  dplyr::mutate(a = ifelse(is.na(count), value,
                           ifelse(count >= 0, count, "error")))

【讨论】:

    【解决方案2】:

    正如在其中一个 cmets 中已经说过的那样,由于 NA,因此在这种情况下合并是最好的解决方案:

    df %>% 
      dplyr::mutate(a = coalesce(count, value))
    

    但在 dplyr 中使用 case_when() 的解决方案也很有用:

    df %>% 
      dplyr::mutate(a = case_when(!is.na(count) ~ count,
                                  TRUE ~ value))
    

    【讨论】:

      【解决方案3】:

      你快到了

      df <- df %>% mutate(a= ifelse(is.na(count), value, count))
      

      【讨论】:

      • 这缺少测试计数是否为正值的条件。 count &gt;=0
      • hmm... 我认为问题只是替换 NA,以防需要正数,` mutate( a = ifelse((is.na(count) & count>=0),计数,值)`
      猜你喜欢
      • 1970-01-01
      • 2022-11-09
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 2020-02-24
      • 1970-01-01
      • 2020-08-13
      相关资源
      最近更新 更多