This question already has answers here:
How to combine multiple conditions to subset a data-frame using “OR”?

(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称为dplyrhere),它也来自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/

10-12 21:38
查看更多