如何检查dataframe中是否存在仅包含0和NA两个唯一值的列
R DataFrame列值校验方案(仅含0和NA)
直接修改apply传入的自定义函数,实现唯一值数量+取值内容的双重校验,以下是两种可行实现:
方案1:集合相等校验
利用setequal做集合匹配,自动忽略取值顺序、支持NA识别,代码最简洁:
apply(production_list_DF, 2, function(a) { col_unique <- unique(a) # 先校验唯一值数量为2,再校验取值集合匹配 length(col_unique) == 2 && setequal(col_unique, c(0, NA)) })
返回的逻辑向量中,TRUE对应的列就是仅包含0和NA的列。
方案2:逐规则校验(兼容性更强)
如果需要更清晰的校验逻辑、避免特殊场景下的集合匹配误差,可以拆分校验规则:
apply(production_list_DF, 2, function(a) { # 规则1:所有非NA值都是0 all(a %in% c(0, NA), na.rm = FALSE) && # 规则2:列中确实存在NA值 any(is.na(a)) && # 规则3:列中确实存在0值 any(a == 0, na.rm = TRUE) })
该方案可以明确区分「只有0没有NA」「只有NA没有0」「存在其他取值」等不符合要求的情况。
内容的提问来源于stack exchange,提问作者user3789200
相关产品推荐
相关产品推荐

