Использование R для фильтрации условий в условиях - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть набор данных, который имеет 4 столбца: home_team, away_team, home_score и away_score, в котором содержатся оценки 18 команд.

Я пытаюсь вернуть 2 игры, сыгранные между 2 указанными c командами в одна команда. Я могу сделать это отдельно, используя пакет dplyr:


game1 <- data %>%
        select(Home_team, Away_team, home_score, away_score) %>%
        filter(Home_team == "Team1", Away_team == "Team2")

game2 <- data %>%
        select(Home_team, Away_team, home_score, away_score) %>%
        filter(Home_team == "Team2", Away_team == "Team")

Я не могу найти способ вернуть результаты двух игр в одной go, так как Home_team и Away_team имеют 2 специфика c условия. Мне нужно, чтобы (Home_team = Team1 AND Away_team = Team2) было одно условие И (Away_team = Team1 AND HOME_team = Team2) было другим условием.

Есть ли способ получить этот вывод? Я пытался сделать это в функции фильтра в dplyr, используя AND и OR (|), но безуспешно, но, возможно, есть другой пакет / функция, которая может достичь этого?

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Как @Dr. Flow говорит ... это должно делать то, что вы хотите

games <- data %>%
        select(Home_team, Away_team, home_score, away_score) %>%
        filter((Home_team == "Team1" & Away_team == "Team2") |
               (Home_team == "Team2" & Away_team == "Team1"))

Работает ли это?

library(dplyr)
set.seed(123)
N = 50

data = data.frame(Home_team = sample(paste0("Team",1:3), N, replace = TRUE),
                  Away_team = sample(paste0("Team",1:3), N, replace = TRUE),
                  home_score = rbinom(N, 5, 0.2),
                  away_score = rbinom(N, 3, 0.2)) %>% 
        filter(Home_team != Away_team)

games <- data %>%
  select(Home_team, Away_team, home_score, away_score) %>%
  filter((Home_team == "Team1" & Away_team == "Team2") |
           (Home_team == "Team2" & Away_team == "Team1"))
> games
  Home_team Away_team home_score away_score
1     Team2     Team1          2          1
2     Team2     Team1          0          0
3     Team2     Team1          3          0
4     Team1     Team2          0          1
5     Team2     Team1          0          1
6     Team1     Team2          0          0
0 голосов
/ 23 апреля 2020

Поскольку у вас не будет home_team == away_team, вы можете сформулировать его как

teams <- c("Team1", "Team2")
games <- data %>%
    select(Home_team, Away_team, home_score, away_score) %>%
    filter(Home_team %in% teams, Away_team %in% teams)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...