dplyr:mutate()和mutate_if()

时间:2017-03-17 05:27:57

标签: r dplyr

我想将列中的所有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 个答案:

答案 0 :(得分:7)

这不是mutate_if所做的。它预测列而不是行,因此与ifelse中的mutate不同。要在数字列中用NA替换所有0 s,请尝试例如:

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

或者

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

答案 1 :(得分:1)

OR:

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