web-dev-qa-db-fra.com

Comment fonctionne Dplyr’s entre?

J'ai lu la documentation et j'ai essayé de la googler. ce devrait être une chose simple, mais il semblerait que ce ne soit pas pour moi; Je me lance donc courageusement et demande si quelqu'un ici pourrait m'expliquer comment fonctionne la fonction between() de Dplyr.

# Explanation documentation
between(x, left, right)

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

Je comprends qu'un vecteur est un tableau unidimensionnel, donc je suppose que c(1:7) est un vecteur, non? J'ai essayé d'utiliser l'exemple fourni dans la documentation comme modèle pour rechercher des vols juillet-septembre, mais les informations suivantes ne font que renvoyer une erreur:

# 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

Je me sens vraiment idiot de poser cette question, mais toute aide pour la comprendre sera grandement appréciée. Je m'excuserais également de ne pas poser une question bien définie; comme je l’apprécie probablement, je ne sais vraiment pas comment le formuler autrement que «je ne l’ai pas».

13
Canned Man

between n'a rien de spécial - toute autre fonction de R aurait conduit au même problème. Votre confusion provient du fait que dplyr possède de nombreuses fonctions vous permettant de travailler sur les noms de colonnes de data.frame comme s'il s'agissait de variables normales; par exemple:

filter(flights, month > 9)

Cependant,between n'est pas l'une de ces fonctions . Comme mentionné, il s’agit simplement d’une fonction normale. Donc, si vous voulez l'utiliser, vous devez fournir des arguments de manière conventionnelle; par exemple:

between(flights$month, 7, 9)

Cela renverra un vecteur logique que vous pourrez désormais utiliser pour indexer votre data.frame:

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

Ou, plus semblable à dplyr:

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

Notez que ici, nous utilisons maintenant une évaluation non standard. Mais l'évaluation est effectuée par filter, pas par between. between est appelé (par filter) à l'aide de l'évaluation standard.

24
Konrad Rudolph

Je suppose que vous le voulez comme ça:

library(nycflights13)
library(dplyr)

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

Je vois entre-temps que cette solution est également apparue dans les commentaires.

3
Wietze314

filtre (vols, entre (mois, 7,9)) semble bien fonctionner

0
prabhakar palanivel