如何准确提取家庭伴侣最高社会阶层?处理hid缺失值异常
问题解决:处理
hid缺失时的家庭最高阶层赋值 核心问题
原代码中,当*hid存在缺失值*时,所有hid为NA的个体被归为同一组计算最高社会阶层,导致这类个体的dominant_class被错误赋值为该组的最大值,而非保留自身的class值。
修正方案
我们需要:
- 计算家庭最高阶层时,仅针对
hid非缺失的组进行聚合 - 合并后,对
hid缺失的个体,将dominant_class替换为其自身的class值
修正后的代码
library(missForest) library(dplyr) library(tidyr) # Set seed for reproducibility set.seed(123) # Create Variables class <- sample(1:4, 10000, replace = TRUE) hid <- rep(1:(10000/2), each = 2) relation <- rep(0:1, 10000/2) did <- rep(sample(2006:2009, 10000/2, replace = TRUE), each = 2) cntry <- sample(c("US", "UK"), 10000, replace = TRUE) # Combine into a data frame df <- data.frame(class = class, hid = hid, relation = relation, did = did, cntry = cntry) df <- prodNA(df, noNA = 0.1) # 仅处理hid非缺失的组,同时保留原数据中class非缺失的条件 dominant_class_df <- df %>% drop_na("class") %>% filter(relation < 3, !is.na(hid)) %>% # 新增过滤hid非缺失的条件 group_by(hid, did) %>% summarise(dominant_class = max(class, na.rm = TRUE)) %>% mutate(dominant_class = if_else(is.infinite(dominant_class), NA_real_, dominant_class)) df2 <- df %>% left_join(dominant_class_df, by = c("hid", "did")) %>% # 对hid缺失的个体,将dominant_class替换为自身的class值 mutate(dominant_class = if_else(is.na(hid), class, dominant_class))
代码说明
- 在生成
dominant_class_df时,添加!is.na(hid)过滤条件,避免将hid缺失的个体纳入家庭聚合计算 - 合并后通过
mutate判断:如果hid缺失,则将dominant_class赋值为当前个体的class值,否则保留聚合得到的家庭最高阶层值
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

