【发布时间】:2017-02-02 19:28:18
【问题描述】:
我有一个运动队的数据,用于跟踪与其他团队的胜负,结构如下:
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"
我真的很纠结如何在 dplyr 中使用 mutate 来做到这一点。我用 ifelse、recode 等尝试了各种方法,但要么不断收到错误,要么得到我不想要的结果。
在 dplyr 中进行这项工作的正确和最有效的方法是什么?
【问题讨论】:
-
mutate(Team = ifelse(is.na(Team1Win) & is.na(Team1Loss), "Team2", "Team1")) -
补充@Vlo 的好评:
ifelse函数非常适合这种类型的用例 -
@Vlo,这是我在发布之前尝试过的事情之一(我只是尝试使用非缺失值,因为有很多团队都缺失了,而不仅仅是我的示例中的两个),并且它抛出了这个错误:“mutate_impl(.data,dots) 中的错误:缺少参数“yes”,没有默认值”知道有什么问题吗?
-
@AshLevitt:是的,由于链接
ifelse,可能是语法问题的可怕错误消息。请注意,如果前一个ifelse为 FALSE,则第二个ifelse是下一个测试。df <- df %>% mutate(Condition = ifelse(Condition == 'thing1', 'other-thing1', ifelse(Condition == 'thing2', 'other-thing2', 'default-thing')))