【发布时间】:2016-12-05 20:59:05
【问题描述】:
我有每行包含一个人的性别和体重(以磅为单位)的数据:
genders <- c("FEMALE", "FEMALE", "FEMALE", "FEMALE", "FEMALE", "MALE", "MALE", "MALE", "MALE")
weights <- c(110.0, 120.0, 112.0, NA, NA, 190.0, 202.0, 195.0, NA)
df <- data.frame(gender=genders, weight=weights)
df
# gender weight
# 1 FEMALE 110
# 2 FEMALE 120
# 3 FEMALE 112
# 4 FEMALE NA
# 5 FEMALE NA
# 6 MALE 190
# 7 MALE 202
# 8 MALE 195
# 9 MALE NA
对于在 weight 列中具有 NA 的每一行,我想用 weight 平均值替换/估算 NA,但应仅使用匹配相同 gender 的行来计算平均值值作为带有 NA 的行。
具体来说,第 4 行和第 5 行具有 FEMALE 的 gender 和 NA 的 weight。我想用与 FEMALE 的 gender 匹配的行子集计算的平均值 weight 替换 NA。在这种情况下,其他第 1、2 和 3 行的平均值为 (110+120+112)/3=114.0。
同样,我想将第 9 行中的 NA 替换为 MALE gender 的权重平均值。
我尝试了以下命令,但它用所有两性用户的平均体重代替了 NA,这不是我想要的。
df$weight[is.na(df$weight)] <- mean(subset(df, gender=df$gender)$weight, na.rm=T)
df
# gender weight
# 1 FEMALE 110.0000
# 2 FEMALE 120.0000
# 3 FEMALE 112.0000
# 4 FEMALE 154.8333
# 5 FEMALE 154.8333
# 6 MALE 190.0000
# 7 MALE 202.0000
# 8 MALE 195.0000
# 9 MALE 154.8333
我搜索了其他问题,但它们与我的问题不太一样:
“Replace NA with mean matching the same ID”
“How to replace NA with mean by subset in R (impute with plyr?)”
“How to replace NA values in a table for selected columns? data.frame, data.table”
【问题讨论】: