【发布时间】:2021-04-01 11:53:11
【问题描述】:
当 NA 出现在两个特定列中时,我正在尝试删除 df 中的行。
示例数据框
tmp <- data.frame(state = c(1, 1, 2, 2, 3, 3, 4, 5),
reg = c(NA, 3, 6, NA, 9, 1, NA, 7),
gas = c(NA, 5, NA, 9, 1, 3, NA, 1),
other = c(1, 2, 4, 2, 6, 8, 1, 1) )
从表格中您可以看到有两行“reg”和“gas”都是 NA
table(tmp$reg, tmp$gas, useNA = 'always')
1 3 5 9 <NA>
1 0 1 0 0 0
3 0 0 1 0 0
6 0 0 0 0 1
7 1 0 0 0 0
9 1 0 0 0 0
<NA> 0 0 0 1 2
我想删除这些行但保留其他 NA 值。
我试过这段代码:
tmp[!is.na(tmp$reg & tmp$gas), ]
但它会删除 reg 和 gas 中所有带有 NA 的行
state reg gas other
2 1 3 5 2
5 3 9 1 6
6 3 1 3 8
8 5 7 1 1
这是我正在寻找的结果:
state reg gas other
2 1 3 5 2
3 2 6 NA 4
4 2 NA 9 2
5 3 9 1 6
6 3 1 3 8
8 5 7 1 1
我也试过
tmp[which(!is.na(tmp$reg & tmp$gas)), ]
但这会产生同样不想要的结果。
【问题讨论】:
-
您应该使用
AND运算符将它们视为单独的条件,例如(!is.na(tmp$gas) & !is.na(tmp$reg))。这对你有用吗? -
这两个命令
tmp[which(!is.na(tmp$gas) & !is.na(tmp$reg)),]tmp[(!is.na(tmp$gas) & !is.na(tmp$reg)),]产生与上述相同的不需要的结果