【问题标题】:Using R to filter conditions within conditions使用 R 过滤条件内的条件
【发布时间】:2020-04-23 12:08:31
【问题描述】:

我有一个包含 4 列的数据集,home_team、away_team、home_score 和 away_score,其中包含 18 支球队的得分。

我正在尝试在一个命令中返回 2 个特定球队之间的 2 场比赛。我可以使用 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")

我似乎无法找到一种方法一次性返回 2 场比赛的结果,因为 Home_team 和 Away_team 是 2 个特定条件。我需要 (Home_team=Team1 AND Away_team=Team2) 成为一个条件,并且 (Away_team=Team1 AND HOME_team=Team2) 成为另一个条件。

有没有办法得到这个输出?我尝试在 dplyr 的过滤器函数中使用 AND 和 OR (|) 来完成它,但没有成功,但也许还有另一个包/函数可以实现这一点?

【问题讨论】:

  • 你试过类似Home_team == c("Team1", "Team2"), Away_team == c("Team1", "Team2")的东西吗?
  • 您可以使用'&'运算符作为AND,'|'运算符作为OR来连接多个过滤条件。

标签: r filter dplyr


【解决方案1】:

作为@Dr.流说......这应该做你想做的事

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

【讨论】:

    【解决方案2】:

    既然你没有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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2020-09-22
      • 1970-01-01
      相关资源
      最近更新 更多