R 按字符串和数字对数据帧进行子集,而不是或

R 按字符串和数字对数据帧进行子集,而不是或,r,dataframe,filtering,subset,R,Dataframe,Filtering,Subset,我想知道如何用两列(一列是字符串,一列是数字)来子集(或过滤)数据帧,其中只包括满足两个条件的结果,而不是一个或另一个 如果使用&运算符,它将返回满足任一条件的数据 data(iris) foo <- iris[which(iris$Petal.Length > 1.2 & iris$Species != "setosa"),] 数据(iris) foo 1.2和iris$物种!=“setosa”),] 这只返回高于1.2的versicolor和virginica结果,

我想知道如何用两列(一列是字符串,一列是数字)来子集(或过滤)数据帧,其中只包括满足两个条件的结果,而不是一个或另一个

如果使用&运算符,它将返回满足任一条件的数据

data(iris)

foo <- iris[which(iris$Petal.Length > 1.2 & iris$Species != "setosa"),]
数据(iris)
foo 1.2和iris$物种!=“setosa”),]
这只返回高于1.2的versicolor和virginica结果,而不是同样高于1.2的setosa结果如果花瓣长度大于1.2,我将如何获得所有结果?如果花瓣长度小于1.2,且为刚毛,则将其移除?

我可以使用
sqldf
dplyr
,如果这是您建议的路线。我们也欢迎其他选择。

我们可以试试

library(data.table)
as.data.table(iris)[Species == "setosa" & Petal.Length> 1.2| 
                         Species != "setosa" & Petal.Length > 1.2]

或使用
dplyr

iris %>%
     filter(Species == "setosa" & Petal.Length > 1.2 |
             Species != "setosa" & Petal.Length > 1.2)
试试这个

require(dplyr)
foo <- filter(iris,Petal.Length > 1.2 & Species != "setosa")
require(dplyr)
foo 1.2和种类!=“刚毛”)

这将返回花瓣长度大于1.2且物种没有刚毛的所有观察结果

我不确定是否正确理解您的逻辑。不会
as.data.table(iris)[Petal.Length>1.2]
给出预期的output@akrun你提交的答案正是我想要的。我可以返回setosa结果>1.2花瓣长度,因此这需要它自己的声明。在这个数据框中,其他两个变量的值都不低于1.2,但如果它们低于1.2,我希望它们都包括在内。这就是为什么你简单的评论回答不起作用的原因。如果有0.5花瓣长的花色,它将被错误地排除在外。哦,好吧,我被虹膜只有三个物种的数据搞糊涂了。这是我当时想不出的明显答案之一。谢谢你的回答!你个人喜欢一种方法而不是另一种方法吗?为什么?@medavis6我喜欢这两种方法,但当我从事项目时,我通常使用
数据表
方法。谢谢你的建议。如果我不清楚,我很抱歉,但是您的答案将从结果数据框中删除所有setosa答案。我想包括所有的versicolor和virginica答案,以及花瓣长度大于1.2的任何刚毛结果。我现在明白了-看起来akrun已经涵盖了你。祝你一切顺利!