Как 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)), кажется, отлично работает