如何在R中测试数据框两列的NA与数值互斥规则?
验证R数据框的规则实现
要验证你提出的两个规则,可以通过构造逻辑条件逐行检查数据框:
规则说明
- 当
x列存在数值(非NA)时,y列必须为NA - 当
x列是NA时,y列必须为非NA的数值
代码实现
1. 标记每行是否符合规则
直接在原数据框中添加一列标记结果:
# 生成每行的验证状态 test$valid <- with(test, (!is.na(x) & is.na(y)) | (is.na(x) & !is.na(y)) ) # 查看结果 print(test)
运行后会得到带valid列的数据框,TRUE表示该行符合规则,FALSE表示不符合。
2. 快速定位不符合规则的行
如果只想找出违规的行,可以用以下代码:
# 筛选出不符合规则的行 invalid_rows <- test[!with(test, (!is.na(x) & is.na(y)) | (is.na(x) & !is.na(y))), ] print(invalid_rows)
针对你提供的test数据框,第6行(x和y均为NA)会被筛选出来,因为它违反了第二条规则。
3. 检查整个数据框是否完全符合规则
如果只需要判断整个数据框是否所有行都满足规则,直接用all()函数:
all_valid <- all(with(test, (!is.na(x) & is.na(y)) | (is.na(x) & !is.na(y)))) print(all_valid)
返回TRUE表示所有行都符合规则,FALSE则说明存在违规行。
代码解释
with(test, ...):避免重复写test$x、test$y,简化代码!is.na(x) & is.na(y):对应规则1,确保x有值时y为NAis.na(x) & !is.na(y):对应规则2,确保x为NA时y有值- 两个条件用
|连接,只要满足其中一个条件,该行就符合规则
内容的提问来源于stack exchange,提问作者jo_
相关产品推荐
相关产品推荐

