r - 使用 dplyr 以数值变量为条件改变因子变量

标签 r dplyr

我有一个运动队的数据,用于跟踪与其他球队的胜负情况,其结构如下:

Game TotalWins TotalLosses Team1Win Team1Loss Team2Win Team2Loss ...
1    1         0           1        NA        NA       NA
2    1         1           NA       NA        NA       1
3    2         1           NA       NA        1        NA
4    2         2           NA       1         NA       NA
5    3         2           NA       NA        1        NA
...

我想创建一个因子变量,其中包含比赛对阵的球队,以便数据如下所示:

Game TotalWins TotalLosses Team1Win Team1Loss Team2Win Team2Loss Team
1    1         0           1        NA        NA       NA        Team1
2    1         1           NA       NA        NA       1         Team2
3    2         1           NA       NA        1        NA        Team2
4    2         2           NA       1         NA       NA        Team1
5    3         2           NA       NA        1        NA        Team2
...

我的想法(不是可行的代码)本质上是这样的:

if (Team1Win == 1 | Team1Loss == 1), Team = "Team1"
if (Team2Win == 1 | Team2Loss == 1), Team = "Team2"

我真的很纠结如何使用 mutate 在 dplyr 中做到这一点。我尝试过使用 ifelse、重新编码等各种方法,但我要么不断收到错误,要么得到不是我想要的结果。

在 dplyr 中进行这项工作的正确且最有效的方法是什么?

最佳答案

与其他答案类似,但进行了一些有用的更改:

  • na.rm = TRUE聚集
  • sub 工作得很好,不需要 stringr
  • 使用 full_join 根据目标包含完整数据。
library(dplyr)
library(tidyr)

df = read.delim(text = 
"Game TotalWins TotalLosses Team1Win Team1Loss Team2Win Team2Loss
1 1 0 1 NA NA NA
2 1 1 NA NA NA 1
3 2 1 NA NA 1 NA
4 2 2 NA 1 NA NA
5 3 2 NA NA 1 NA", sep = " ")

df %>% 
  select(-starts_with("Total")) %>% 
  gather(Team, one, -Game, na.rm = TRUE) %>% 
  select(-one) %>% 
  mutate(Team = sub("Win|Loss", "", Team)) %>% 
  full_join(df, .)

#> Joining, by = "Game"
#>   Game TotalWins TotalLosses Team1Win Team1Loss Team2Win Team2Loss  Team
#> 1    1         1           0        1        NA       NA        NA Team1
#> 2    2         1           1       NA        NA       NA         1 Team2
#> 3    3         2           1       NA        NA        1        NA Team2
#> 4    4         2           2       NA         1       NA        NA Team1
#> 5    5         3           2       NA        NA        1        NA Team2

关于r - 使用 dplyr 以数值变量为条件改变因子变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42010740/

相关文章:

删除满足条件的每个 ID 的最后一个条目

r - dplyr group_by 动态列

r - 使用 dbplyr 进行数据库计算

将 NA 值替换为 dplyr 中因子变量的模态值

r - 命令行 - 适用于 Windows 的 Awk 命令

r - VisualStudio 2017 R 项目

r - filter() 和 str_detect() 时找不到列对象

sql - 将正则表达式应用于 R 中的 SQL 数据库

r - 根据组属性创建虚拟变量

r - 基于其他列变量的 R 长格式行之间的差异