如何使用“OR”将多个条件组合到一个数据框中?

我在R有一个data.frame我想在两个不同的列上尝试两个不同的条件,但我希望这些条件是包容性的。 因此,我想用“或”来结合条件。 当我想使用“AND”条件时,我已经使用了以下语法,并取得了很大的成功。

my.data.frame <- data[(data$V1 > 2) & (data$V2 < 4), ] 

但是我不知道如何在上面使用'OR'。

 my.data.frame <- subset(data , V1 > 2 | V2 < 4) 

一个模拟这个函数行为的替代解决scheme,更适合包含在一个函数体中:

 new.data <- data[ which( data$V1 > 2 | data$V2 < 4) , ] 

有些人批评使用which做法是不需要的,但它确实可以防止NA值丢弃不想要的结果。 对于上面演示的两个选项,等效的(.ie不会返回NA或V1中的任何NA的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 

使用“&”时参数的顺序可能很重要。

您正在寻找“|”。 请参阅http://cran.r-project.org/doc/manuals/R-intro.html#Logical-vectors

 my.data.frame <- data[(data$V1 > 2) | (data$V2 < 4), ] 

只是为了完整性,我们可以使用运算符[[[

 set.seed(1) df <- data.frame(v1 = runif(10), v2 = letters[1:10]) 

几个选项

 df[df[1] < 0.5 | df[2] == "g", ] df[df[[1]] < 0.5 | df[[2]] == "g", ] df[df["v1"] < 0.5 | df["v2"] == "g", ] 

df $ name 等同于 df [[“name”,exact = FALSE]]

使用dplyr

 library(dplyr) filter(df, v1 < 0.5 | v2 == "g") 

使用sqldf

 library(sqldf) sqldf('SELECT * FROM df WHERE v1 < 0.5 OR v2 = "g"') 

以上选项的输出:

  v1 v2 1 0.26550866 a 2 0.37212390 b 3 0.20168193 e 4 0.94467527 g 5 0.06178627 j