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已经涵盖了你。祝你一切顺利!