gpt4 book ai didi

基于匹配另一列的行子集用均值替换 NA?

转载 作者:行者123 更新时间:2023-12-04 16:38:53 26 4
gpt4 key购买 nike

我有数据,其中每一行都包含一个人的性别和体重(以磅为单位):

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 行有一个 gender女性和 weight NA。我想用平均值 weight 替换 NA在匹配 gender 的行子集上计算女性。在这种情况下,其他行 1、2 和 3 的平均值将为 (110+120+112)/3=114.0。

同样,我想用 MALE gender 的权重平均值替换第 9 行中的 NA .

我尝试了以下命令,但它用超过 的平均权重替换了 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 "

最佳答案

您可以使用 ave()replace() (或标准手动更换)。

df$weight <- with(df, ave(weight, gender,
FUN = function(x) replace(x, is.na(x), mean(x, na.rm = TRUE))))

这使

  gender   weight
1 FEMALE 110.0000
2 FEMALE 120.0000
3 FEMALE 112.0000
4 FEMALE 114.0000
5 FEMALE 114.0000
6 MALE 190.0000
7 MALE 202.0000
8 MALE 195.0000
9 MALE 195.6667

关于基于匹配另一列的行子集用均值替换 NA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38687674/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com