【问题标题】:dplyr: mutate() and mutate_if()dplyr: mutate() 和 mutate_if()
【发布时间】:2017-08-08 13:23:58
【问题描述】:

我想将列中的所有 NA 更改为 0。 我可以用mutate() 做到这一点,但不能用mutate_if()

这行得通:

> test <- tibble(Q3.2 = c(1,2, NA, NA, 3),
                             Q8.2 = c(2, NA, 1, NA, 4))

> test %>% select_("Q3.2", "Q8.2") %>%
    mutate(Q3.2 = ifelse(is.na(Q3.2), 0, Q3.2),
           Q8.2 = ifelse(is.na(Q8.2), 0, Q8.2))

但这不是:

> test %>% select_("Q3.2", "Q8.2") %>%
+     mutate_if(is.na(.), 0, .)
Error in get(as.character(FUN), mode = "function", envir = envir) : 
  object 'p' of mode 'function' was not found

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    或者:

    library(tidyr)
    replace_na(list(Q3.2 = 0, Q8.2 = 0))
    

    【讨论】:

    • 感谢@Axeman 的编辑。这是我第一次回答 SO!在过去的一年中,我广泛使用了 SO,并从零开始自学了 R,足以构建一个商业(原型)数据库应用程序,该应用程序每月对大量不同的源文件进行报告和分析。 (我不是受过培训或经验的程序员。)下次我回答时,我会知道如果我包含该软件包会更有帮助。我真的欠这个社区很多。
    【解决方案2】:

    这不是mutate_if 所做的。它基于列而不是行,因此与mutate 中的ifelse 的工作方式不同。要将数字列中的所有 NAs 替换为 0s,请尝试例如:

    test %>% mutate_if(is.numeric, funs(ifelse(is.na(.), 0, .)))
    

    或者

    test %>% mutate_if(is.numeric, coalesce, ... = 0)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-26
      • 2015-05-02
      • 1970-01-01
      • 2019-01-30
      • 1970-01-01
      • 2016-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多