Filtern Sie "entweder" "oder" mit dplyr
Nov 11 2020
Ich habe einen data.frame, der so aussieht.
dat1=data.frame(time=c(1,2,1,2,1,2,1,2), team=c("A","A","A","A","B","B","C","C"), name=c("LT","LT","CH","CH","CH","CH","AT","AT"))
time team name
1 A LT
2 A LT
1 A CH
2 A CH
1 B CH
2 B CH
1 C AT
2 C AT
Ich möchte zu dplyr sagen, bitte group_by "team" und die Zeilen jedes Teams filtern, das den Namen "LT" enthält. Wenn ein Team den Namen "LT" nicht enthält, filtern Sie den Namen "CH" ein.
Ich möchte, dass mein data.frame so aussieht.
time team name
1 A LT
2 A LT
1 B CH
2 B CH
Jede Hilfe wird sehr geschätzt
Antworten
2 tmfmnk Nov 11 2020 at 01:32
Eine dplyrOption könnte sein:
dat1 %>%
group_by(team) %>%
filter(if(any(name == "LT")) name == "LT" else name == "CH")
time team name
<dbl> <fct> <fct>
1 1 A LT
2 2 A LT
3 1 B CH
4 2 B CH
1 akrun Nov 11 2020 at 07:03
Wir können arrangezuerst und dann filterbasierend auf dem firstWert in 'Name' nach Gruppierung nach 'Team'
library(dplyr)
dat1 %>%
filter(name %in% c("LT", "CH")) %>%
arrange(team, ordered(name, levels = c('LT', 'CH'))) %>%
group_by(team) %>%
filter(name %in% first(name))