我有一个tbl_df,我试图根据各种过滤器创建唯一的列。我阅读了一些有关使用ifelse和其他mutate函数的文章,但我自己却无法解决。 df名为Test,并在下面列出。
accidental
我正在尝试根据特定过滤器的结果创建各种列。到目前为止,我的代码如下:
name team salary season position
<chr> <int> <int> <int> <chr>
AP 6 15 2017 OF
AN 11 8 2016 SP
AS 1 8 2014 SP
AR 3 11 2018 SS
AB 2 10 2015 3B
AC 8 7 2017 RP
Abe 11 10 2016 OF
AM 7 12 2014 RP
Ari 11 48 2018 1B
BH 13 29 2015 OF
我要创建的mutate列是:
我希望所有这些列和结果都按团队和季节分组(如上所示)
答案 0 :(得分:1)
您可能很难解决这个问题,因为您似乎在试图汇总数据而不是对其进行变异。这样,您可以在summarise()
中使用ifelse()
来代替mutate()
来实现。
library(tidyverse)
test %>%
group_by(team, season) %>%
summarise(
players = n(),
hitting = sum(ifelse(!position %in% c("SP", "RP"), salary, 0)),
pitching = sum(ifelse(position %in% c("SP", "RP"), salary, 0)),
relievers = sum(ifelse(position == "RP", 1, 0)),
over_40 = sum(ifelse(salary > 40, 1, 0)),
over_40_h = sum(ifelse(salary > 40 & !position %in% c("SP", "RP"), 1, 0))
) %>%
mutate(
hitting = ifelse(season < 2016 | season > 2018, NA, hitting),
pitching = ifelse(season < 2016 | season > 2018, NA, pitching)
) %>%
arrange(team, season)
请注意:
mutate()
命令,以删除问题中所指定的2016年至2018年之间的年份的投手和击球手工资之和。但是,由于无论如何您都是按季节对数据进行分组的,因此简单地忽略您不感兴趣的年份的薪水也很容易。dplyr
,因此我将列名更改为跟随tidyverse style guide。