Как dplyrs между работой?

Я прочитал документацию, и я попробовал поиграть в нее; это должно быть просто, но, похоже, это не для меня; поэтому я смело выхожу и спрашиваю, может ли кто-нибудь здесь объяснить мне, как работает dplyrs between().

# Explanation documentation
between(x, left, right)

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

Я понимаю, что вектор является одномерным массивом, поэтому я полагаю, что c(1:7) является вектором, правильно? Я попытался использовать пример, представленный в документации, в качестве шаблона для поиска рейсов июль-сентябрь, но следующее просто возвращает ошибку:

# Example from documentation contd
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

Я чувствую себя очень глупым, спрашивая об этом, но любая помощь в понимании этого будет очень признательна. Я бы также извинился за то, что не задал четко определенного вопроса; как это, вероятно, оценили, я действительно не знаю, как это сделать, кроме "Я не понимаю".

Ответ 1

between которыми нет ничего особенного - любая другая функция в R привела бы к одной и той же проблеме. Ваше замешательство проистекает из того факта, что dplyr имеет множество функций, которые позволяют вам работать с именами столбцов data.frame, как если бы они были нормальными переменными; например:

filter(flights, month > 9)

Однако between нет одной из этих функций. Как уже упоминалось, это просто нормальная функция. Поэтому, если вы хотите использовать его, вам необходимо предоставить аргументы обычным способом; например:

between(flights$month, 7, 9)

Это вернет логический вектор, и теперь вы можете использовать его для индексации вашего data.frame:

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

Или, более dplyr-like:

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

Обратите внимание, что здесь мы теперь используем нестандартную оценку. Но оценка выполняется с помощью filter, а не between. between называется (по filter), используя стандартную оценку.

Ответ 2

Я думаю, вы хотите, чтобы это было так:

library(nycflights13)
library(dplyr)

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

Я вижу, что это решение также появилось в комментариях.

Ответ 3

фильтр (полеты, между (месяц, 7,9)), кажется, отлично работает