【发布时间】:2020-03-02 07:00:40
【问题描述】:
我的数据是这样的:
train <- data.frame(y=c(1,2,1,1), x1=c(2,4,NA,5), x2=c(8,NA,6,12))
我需要用该列的平均值替换每个 x 变量的缺失值 (NA),但必须使用对应 y 值等于行的 y 值的 x 变量的值来计算平均值那个缺失值。
例如:在 x1 列的 NA 所在的行中,y 值等于 1,因此应该将这个缺失值替换为 2 到 5 之间的平均值(即 y 所在的 x1 值还有 1).
我的代码是这样的,但平均值不是有条件的:
for(i in 1:ncol(train)){
train[is.na(train[,i]), i] <- mean(train[,i], na.rm = TRUE)
}
【问题讨论】:
-
尝试
library(zoo); library(dplyr);train %>% group_by(y) %>% mutate_all(na.aggregate)对于第 2 行,即 y = 2,'x2' 是NA,应该保持为NA