R语言处理GEM等4类数据集:识别并删除缺失值NA
跨国数据集缺失值处理全方案
第一步:统一缺失值标记
四个数据集里仅Hofstede使用.作为缺失值标记,其余三个数据集的缺失值均为R标准NA格式,先统一缺失值规范:
# 替换Hofstede中的.为标准NA Hofstede[Hofstede == "."] <- NA # 将Hofstede的文化维度列从字符型转为数值型,自动处理异常值为NA Hofstede[, c("Power Distance", "Individualism", "Masculinity", "Uncertainty Avoidance")] <- lapply(Hofstede[, c("Power Distance", "Individualism", "Masculinity", "Uncertainty Avoidance")], as.numeric)
其余三个数据集无自定义缺失标记,无需额外转换。
第二步:缺失值情况统计
先统计各列缺失率,判断缺失严重程度再决定处理逻辑:
# 以GEM数据集为例,其他数据集替换变量名即可 # 查看每列缺失率(百分比) sapply(GemData, function(x) round(sum(is.na(x))/nrow(GemData)*100, 2)) # 查看所有包含缺失值的行 GemData[!complete.cases(GemData), ]
如果某列缺失率超过30%,建议优先考虑是否要将该列纳入回归,而非直接删除样本。
第三步:缺失值剔除方案
可根据你的分析需求二选一:
- 仅剔除回归用到的变量有缺失的样本(推荐,尽可能保留样本量)
可以直接在回归函数中指定缺失处理逻辑,不需要提前删数:
如果需要单独提取干净的数据集用于其他分析:# 回归时自动剔除用到的变量存在缺失的样本 lm(因变量 ~ 自变量1 + 自变量2, data = 你的数据集, na.action = na.omit)# 替换引号内的内容为你实际要用到的回归变量名 clean_data <- 原始数据集[complete.cases(原始数据集[, c("变量1", "变量2", "变量3")]), ] - 剔除所有存在任意缺失值的样本(适合样本量充足、缺失占比很低的场景)
# 直接删除所有含NA的行 clean_data <- na.omit(原始数据集)
多数据集合并场景额外建议
后续需要将四个数据集按国家匹配合并后再做回归的话,建议先完成国家代码统一:
- GEM的
cntry、Hofstede的ctr、GPS的isocode均为三位ISO国家代码,可以直接作为匹配键 - GLOBE数据集目前只有国家名,可先关联三位ISO代码后再合并
合并完成后再统一做一次缺失值剔除,避免匹配过程中产生的新NA影响回归结果。
结果校验
处理完成后执行以下代码确认无残留缺失值:
sum(is.na(clean_data))
返回结果为0即说明数据集已无缺失值,可直接用于后续回归分析。
内容的提问来源于stack exchange,提问作者Liam
相关产品推荐
相关产品推荐

