2016-11-28 60 views
5

Chcę wybrać wszystkie kolumny zaczynające się od fy i kończąc na giving przy użyciu dplyr. Próbowałem następujący kod:Jak używać jednocześnie starts_with i ends_with w tym samym czasie w jednym poleceniu select?

df %>% select(start_with('fy') & ends_with('giving') 

ale to nie zadziałało.

p/s: faktycznie mogę włamać się go z następującym fragmencie

df %>% select(starts_with('fy')) %>% select(ends_with('giving')) 

Ale nadal chcesz umieścić wszystkie dwa warunki w jednym miejscu

Odpowiedz

4

Można spróbować użyć matches zamiast z regularnym wyrażenie:

df %>% select(matches("^fy.*giving$")) 

powinien wykonać zadanie.

Manekin przykład stosując iris:

iris %>% select(matches("^Pet.*gth$")) %>% colnames 
[1] "Petal.Length" 
+0

dzięki. Nie jestem fanem regex, ale rozwiązanie jest dobre. – Garp

+1

Ja też nie. Poświęciłem trochę czasu na naukę gramatyki (dzięki temu (http://regexr.com/)), uratowało mnie to jak tygodnie pracy, aby lepiej cieszyć się prawdziwym życiem, a potem zmieniłem się w wielkiego fana regex;) –

+0

może być powinienem spróbować :) tak, dzięki za zasoby – Garp

4

można użyć to:

df %>% select(intersect(starts_with('fy') , ends_with('giving'))) 

dodaje sam przykład jak @Vincent Bonhomme:

iris %>% select(intersect(starts_with("Pet"), ends_with("gth"))) %>% colnames 
#[1] "Petal.Length" 
+0

dzięki. Zapomniałem, że ci pomocnicy zwracają zestaw np. – Garp

+0

, czy możesz oznaczyć jako odpowiedź? – cccmir

+0

Zrobiłem, ale powiedziałem, że muszę poczekać 5 minut – Garp