dplyr如何工作?

时间:2016-10-12 11:16:24

标签: r dplyr

我已阅读文档,并尝试使用Google搜索;它应该是一件简单的事情,但它似乎不适合我;所以我大胆地出去询问是否有人在这里可以解释dplyr的between()是如何工作的。

# Explanation documentation
between(x, left, right)

x            A numeric vector of values
left, right: Boundary values

我理解一个向量是一维数组,所以我认为c(1:7)是一个向量,对吧?我尝试使用文档中提供的示例作为模板来搜索7月至9月的航班,但以下只是返回错误:

# Example from documentation cont’d
x <- rnorm(1e2)
x[between(x, -1, 1)]

# Loading the library
library(nycflights13)

# Execute my hopeless attempt at between()
flights[between(month, 7, 9)]

# Output and error message
> flights[between(month, 7, 9)]
Error in between(month, 7, 9) : object 'month' not found

我觉得这真的很愚蠢,但是理解这一点的任何帮助都将非常感激。我也会因为没有提出一个明确定义的问题而道歉;可能很感激,除了'我不明白'之外,我真的不知道该怎么说。

3 个答案:

答案 0 :(得分:25)

between并不特别 - R中的任何其他函数都会导致同样的问题。您的困惑源于dplyr具有许多函数,这些函数允许您处理data.frame列名称,就像它们是正常变量一样;例如:

filter(flights, month > 9)

但是, between不是这些功能之一。如上所述,它只是一个正常的功能。因此,如果您想使用它,您需要以传统方式提供参数;例如:

between(flights$month, 7, 9)

这将返回一个逻辑向量,您现在可以使用它来索引data.frame:

flights[between(flights$month, 7, 9), ]

或者,更像dplyr:

flights %>% filter(between(month, 7, 9))

请注意 here 我们现在使用非标准评估。但评估是由filter执行的,而不是由between执行的。使用标准评估调用between filter

答案 1 :(得分:3)

我想你想要这样:

library(nycflights13)
library(dplyr)

flights %>% filter(between(month,7,9))

我在此期间看到这个解决方案也出现在评论中。

答案 2 :(得分:0)

过滤器(航班,在(月,7,9)之间)似乎工作得很好