这是我的数据:
@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)
我认为问题与代码在查看数据时没有正确应用列名有关吗?
答案 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)), .)))