This question already has answers here:
How to combine multiple conditions to subset a data-frame using “OR”?
(3个答案)
4年前关闭。
我正在尝试从数据框中选择。问题是为什么我下面的最后一个查询返回所有5条记录而不是前两个返回?
更新:
还有一个新版本的
(2)
您可以通过以下方法查看帮助手册:
较短的形式以与算术运算符几乎相同的方式执行元素比较。较长的形式从左到右求值,只检查每个向量的第一个元素。评估仅在确定结果之前进行。较长的形式适用于编程控制流,通常在if子句中首选。
根据您的问题,您所做的基本上是
(3个答案)
4年前关闭。
我正在尝试从数据框中选择。问题是为什么我下面的最后一个查询返回所有5条记录而不是前两个返回?
> x <- c(5,1,3,2,4)
> y <- c(1,5,3,4,2)
> data <- data.frame(x,y)
> data
x y
1 5 1
2 1 5
3 3 3
4 2 4
5 4 2
> data[data$x > 4 || data$y > 4]
x y
1 5 1
2 1 5
3 3 3
4 2 4
5 4 2
最佳答案
(1)对于选择数据(子集),我强烈推荐Hadley Wickhm编写的subset
包中的plyr
函数,它更干净且易于使用:
library(plyr)
subset(data, x > 4 | y > 4)
更新:
还有一个新版本的
plyr
称为dplyr
(here),它也来自Hadley,但据说可以更快,更容易使用。如果您曾经见过像%.%
或%>%
这样的操作员,则知道他们正在使用dplyr
链接操作。result <- data %>%
filter(x>4 | y>4) #NOTE filter(condition1, condition2..) for AND operators.
(2)
|
和||
确实存在一些区别:您可以通过以下方法查看帮助手册:
?'|'
较短的形式以与算术运算符几乎相同的方式执行元素比较。较长的形式从左到右求值,只检查每个向量的第一个元素。评估仅在确定结果之前进行。较长的形式适用于编程控制流,通常在if子句中首选。
> c(1,1,0) | c(0,0,0)
[1] TRUE TRUE FALSE
> c(1,1,0) || c(0,0,0)
[1] TRUE
根据您的问题,您所做的基本上是
data[TRUE]
,它将...返回完整的数据框。关于r - 如何过滤两列条件的数据帧? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20084462/