我在 R 中有一个 data.frame。我想在两个不同的列上尝试两个不同的条件,但我希望这些条件具有包容性。因此,我想使用“或”来组合条件。当我想使用“AND”条件时,我之前使用过以下语法并取得了很大的成功。
my.data.frame <- data[(data$V1 > 2) & (data$V2 < 4), ]
但我不知道如何在上面使用“或”。
my.data.frame <- subset(data , V1 > 2 | V2 < 4)
模拟此函数的行为并且更适合包含在函数体中的替代解决方案:
new.data <- data[ which( data$V1 > 2 | data$V2 < 4) , ]
有些人批评使用which不必要的,但它确实可以防止NA值抛出不需要的结果。与上面演示的两个选项等效(即不返回 V1 或 V2 中任何 NA 的 NA 行)which将是:
which
NA
new.data <- data[ !is.na(data$V1 | data$V2) & ( data$V1 > 2 | data$V2 < 4) , ]
注意:我要感谢试图修复上面代码中的错误的匿名贡献者,这个修复被版主拒绝了。实际上,当我更正第一个错误时,我注意到了另一个错误。如果要按我的意图处理,则需要首先检查 NA 值的条件子句,因为…
> NA & 1 [1] NA > 0 & NA [1] FALSE
使用“&”时,参数的顺序可能很重要。