dplyr: mutate() 和 mutate_if()

3

我希望将所有列中的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
2个回答

9

这并不是mutate_if的作用。它基于列而不是行进行谓词处理,因此与mutate中的ifelse不同。要在数字列中使用0替换所有NA,请尝试使用以下方法:

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

或者

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

2

或者:

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

1
感谢您的编辑,@Axeman。这是我在SO上的第一个答案!过去一年里,我广泛使用SO,并从零开始自学了R,足以构建一个商业(原型)DB应用程序,对非常大的不同源文件组进行每月报告和分析。(我既没有培训也没有经验的程序员。)下次回答时,我会知道如果包含软件包会更有帮助。我真的很感激这个社区。 - Steve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接