如何在R中基于性别占比与年龄均值进行缺失值插补?
R中按性别占比与年龄均值插补缺失值
首先需要把数据里的空格形式缺失值转换为R标准的NA,方便后续处理:
# 替换空格为NA Data2$Gender[Data2$Gender == " "] <- NA Data2$Age[is.na(Data2$Age)] <- NA
接下来分两步完成缺失值插补:
1. 插补性别(Gender)缺失值
已知女性占比60%、男性占比40%,按此比例随机为缺失的Gender赋值:
# 统计性别缺失的数量 missing_gender_num <- sum(is.na(Data2$Gender)) # 按指定比例生成随机性别 filled_gender <- sample(c("Female", "Male"), size = missing_gender_num, replace = TRUE, prob = c(0.6, 0.4)) # 将生成的性别赋值回数据框 Data2$Gender[is.na(Data2$Gender)] <- filled_gender
2. 插补年龄(Age)缺失值
根据已知的性别对应年龄均值,为缺失的Age赋值:
# 男性缺失年龄赋值为33 Data2$Age[is.na(Data2$Age) & Data2$Gender == "Male"] <- 33 # 女性缺失年龄赋值为39 Data2$Age[is.na(Data2$Age) & Data2$Gender == "Female"] <- 39
完整运行代码
整合所有步骤的完整代码如下:
# 原始数据构建 Gender <- c("Male", " ", " ", "Female", "Female", " ", " ", "Male", " ", "Female") Age <- c(' ', 33, 33, 39, 39, 33,33, 33, 32, 39) Data2 <- data.frame(Gender, Age) Data2$Age <- as.numeric(Data2$Age) Data2$Gender <- as.character(Data2$Gender) # 替换空格为NA Data2$Gender[Data2$Gender == " "] <- NA Data2$Age[is.na(Data2$Age)] <- NA # 插补性别 missing_gender_num <- sum(is.na(Data2$Gender)) filled_gender <- sample(c("Female", "Male"), size = missing_gender_num, replace = TRUE, prob = c(0.6, 0.4)) Data2$Gender[is.na(Data2$Gender)] <- filled_gender # 插补年龄 Data2$Age[is.na(Data2$Age) & Data2$Gender == "Male"] <- 33 Data2$Age[is.na(Data2$Age) & Data2$Gender == "Female"] <- 39 # 查看处理后的数据 print(Data2)
内容的提问来源于stack exchange,提问作者andrew
相关产品推荐
相关产品推荐

