【发布时间】:2017-02-21 04:10:55
【问题描述】:
我已阅读文档并尝试使用谷歌搜索;这应该是一件简单的事情,但对我来说似乎不是;所以我大胆地去问这里是否有人可以解释一下 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
我觉得问这个真的很愚蠢,但任何有助于理解这一点的帮助将不胜感激。我也为没有提出明确的问题而道歉;可能很感激,除了“我不明白”之外,我真的不知道如何表达它。
【问题讨论】:
-
这不是关于变量之间的问题,而是关于定义变量的问题:您正在过滤您的数据框
flights,方法是说“在变量月份保持在 7 到 9 之间的行”。但是month没有定义,R 会告诉你。你宁愿找flights[between(flights$month, 7, 9)]。 -
如果想让R理解
month指的是flights范围内的列名,可以这样做:with(flights, flights[between(month, 7, 9)]) -
R 人开发了几个概念,例如 base、tidyverse 和 data.table。子集和其他东西的工作方式有点不同,这经常令人困惑。
dplyr及其between()是 tidyverse 的一部分。最好的使用方式可能是flights %>% filter(between(month, 7, 9))或filter(flights, between(month, 7, 9))。您尝试了 base-R 子集。这也有效(您可以混合使用),但需要进行上述调整。