1
votes

Sélection d'un sous-ensemble de données en fonction de plusieurs filtres

J'essaie d'obtenir un sous-ensemble d'une plus grande trame de données Films et je voulais sélectionner tous les films avec des États-Unis et avec une année entre 2 dates.

J'ai écrit cette déclaration:

usMoviesInRange <- movies %>% filter(country == "USA") %>% between(year, 1986, 2016)

mais j'obtiens une erreur indiquant,

Erreur entre (., année, 1986, 2016): argument non utilisé (2016)

Quelqu'un peut-il m'aider à comprendre ce qui se passe ici ou ce que je fais mal?


2 commentaires

between renvoie une valeur logique. Vous devez faire quelque chose comme: nycflights13 :: vols [entre (nycflights13 :: vols $ mois, 1, ‌ 4),] ou l'utiliser dans le filtre : < code> nycflights13 :: vols%>% filtre (transporteur == "UA", entre (mois, 1,4))


Utilisez simplement entre à l'intérieur du filtre : filter (country == "USA" & between (year, 1986, 2016))


3 Réponses :


1
votes

Je recommande vivement cette option, vous pouvez mettre plusieurs arguments dans dplyr::filter

country[between(x = country$year, left = 1986,right =  2016),]

Si vous utilisez dplyr :: between code> vous devez l'utiliser de cette manière:

usMoviesInRange = movies %>% 
    filter(country %in% "USA", 
           year > 1986, 
           year < 2016)

J'espère que cela aide,


2 commentaires

Pour ajouter à @danguloa, il semble qu'entre sreturn les booléens, c'est pourquoi il doit être indexé. Exemple: x <- data.frame (C = c ('US', 'US', 'MEX'), year = c (2015,2017,2019)) x%>% entre (année, 2015, 2017)


Merci pour cela, je viens d'un fond C # donc une partie de cela a du sens pour moi, mais la notation est ce qui me dérange.



4
votes

Vous n'utilisez pas correctement entre (x, gauche, droite)

Essayez ceci

# A tibble: 2 x 2
  country  year
  <chr>   <dbl>
1 USA      2000
2 USA      1990

pour donner

XXX


3 commentaires

Curieux de savoir pourquoi vous avez utilisé un filtre supplémentaire et un tuyau. Pourquoi ne pas simplement l'ajouter au premier filtre?


Aucune raison particulière - j'ai juste essayé de corriger le code et c'était la première chose qui fonctionnait. Ou j'aurais pu utiliser filter (between (year, 1986, 2016)) comme Lunalo John l'a fait quelques minutes après moi - la bonne chose à propos de R est qu'il y a plusieurs façons de faire la même chose


Histoire vraie - j'étais simplement curieuse. J'apprends encore, donc parfois une petite chose comme celle-là a plus d'intention que je ne le pense. Merci pour le suivi!



1
votes

entre la commande est utilisée à la place de > = et par exemple

usMoviesInRange <- movies %>% filter(country == "USA") %>% filter(between(year, 1986, 2016))

peut être réécrit comme

usMoviesInRange <- movies %>% filter(country == "USA") %>% filter(year>=1986 &<=2016)


0 commentaires