我在R中有一个data.frame我想在两个不同的列上尝试两个不同的条件,但我希望这些条件是包容性的。因此,我想用“或”来结合条件。当我想要使用“AND”条件时,我已经使用了以下语法并取得了很大的成功。如何使用“OR”将多个条件组合成一个数据框子集?
my.data.frame <- data[(data$V1 > 2) & (data$V2 < 4), ]
但我不知道如何在上面使用'OR'。
我在R中有一个data.frame我想在两个不同的列上尝试两个不同的条件,但我希望这些条件是包容性的。因此,我想用“或”来结合条件。当我想要使用“AND”条件时,我已经使用了以下语法并取得了很大的成功。如何使用“OR”将多个条件组合成一个数据框子集?
my.data.frame <- data[(data$V1 > 2) & (data$V2 < 4), ]
但我不知道如何在上面使用'OR'。
my.data.frame <- subset(data , V1 > 2 | V2 < 4)
模仿此功能的行为,并会更适合于函数体内包含一个可选的方案:
new.data <- data[ which(data$V1 > 2 | data$V2 < 4) , ]
有的人批评使用which
不需要,但它确实会阻止NA
值抛出不想要的结果。等效(.IE没有返回NA-行任何NA在V1或V2)以上证明没有which
两个选项是:
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 $名称为equivalent to DF [[ “姓名”,确切= 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
与其对这样的“基本”问题变得焦头烂额,不如将它们视为让互联网更好的机会。 SO的谷歌果汁很强劲,每当SO问题从2004年开始取代可怕的列表问题时,天使就会获得它的翅膀。 – Andrew 2012-06-04 16:19:28
我认为贬低listserv问题对寻求学习如何搜索的人是一种伤害。人们应该考虑使用一个好的搜索引擎来处理特定的问题我的选择是http://markmail.org/search/?q=list%3Aorg.r-project,但其他人可能会选择Rseek.org。 – 2016-09-01 19:11:17
我认为诋毁listserv问题的诋毁言论对于那些试图阅读非贬低评论的人是不利的 – hedgedandlevered 2016-11-15 06:32:49