在mutate_at中使用列名称向量

时间:2017-05-28 17:07:38

标签: r dplyr

这是我的数据:

@extend .X

现在,如果我想在单个列中替换NA,比如b,用组a的b的平均值替换,我知道如何使用此代码来执行此操作:

ID a b c d
1  x 1 2 3
2  y 1 2 3
3  z NA NA NA
4  z 1 2 3
5  y NA NA NA

我想使用基本相同的代码,但要将其应用于列b,c,d。但我的代码不起作用,我不知道为什么,它说“错误,不兼容的大小(3),期望10(组大小)或1”

data %>%
  group_by(a) %>%
  mutate(b = ifelse(is.na(b), as.integer(mean(b, na.rm=TRUE)), b)

我认为问题与代码在查看数据时没有正确应用列名有关吗?

1 个答案:

答案 0 :(得分:2)

要引用要变异的字符向量,请改用 mutate_if

cols <- c("b","c","d")

data %>%
  group_by(a) %>%
  mutate_if(names(.) %in% cols, 
            funs(ifelse(is.na(.), as.integer(mean(., na.rm=TRUE)), .)))