缺失值指示变量:如何在R的wbpol数据集生成1/0型缺失标记列
解决wbpol数据集添加missing列的问题
我来帮你排查下问题所在,然后给出几种靠谱的实现方法~
原代码的错误原因
你原来的代码里,TRUE == 1和FALSE == 0这两个表达式本身都会返回逻辑值TRUE(因为在R中,TRUE等价于1,FALSE等价于0)。所以不管apply(wbpol, 1, anyNA)判断的结果是TRUE还是FALSE,ifelse都会返回TRUE,这就导致你的missing列全是TRUE了。
正确的基础实现方法
直接把ifelse的第二个和第三个参数设为你想要的数值1和0就行:
wbpol$missing <- ifelse(apply(wbpol, 1, anyNA), 1, 0)
更高效的替代写法(推荐)
apply是逐行循环的操作,对于大数据集来说效率不高。推荐用向量化的方式来实现,速度更快:
# 统计每行的NA数量,判断是否大于0,再转成整数(TRUE→1,FALSE→0) wbpol$missing <- as.integer(rowSums(is.na(wbpol)) > 0)
测试验证
你可以用一个小数据集测试下效果:
# 构造测试数据 wbpol <- data.frame( col1 = c(1, NA, 3, 4), col2 = c(NA, 2, 4, 5), col3 = c(5, 6, NA, 7) ) # 用推荐方法生成missing列 wbpol$missing <- as.integer(rowSums(is.na(wbpol)) > 0) # 查看结果 print(wbpol)
输出结果里,前3行因为有NA,missing列是1;最后一行全为非NA,missing列是0,完全符合需求。
内容的提问来源于stack exchange,提问作者869picardy
相关产品推荐
相关产品推荐

