使用基于str_detect的dplyr变异

时间:2019-07-13 02:03:20

标签: r dplyr stringr mutate

我正在尝试根据数据是否包含在“ home_lineup”或“ away_lineup”字符串中,为数据框中的每个球员分配球队价值。

我使用了str_detect函数,除此之外,我还没有找到解决问题的替代方法。

此链接中包括该数据帧的快照,该快照将具有season_data_select分配。

library(gsheet)
url <- 'https://docs.google.com/spreadsheets/d/1Z1njK5FxCZgIUaxxoRUVaK8DFNWP4OGthT6kuFHcC7I/edit?usp=sharing'
season_data_select  <- gsheet2tbl(url)

https://docs.google.com/spreadsheets/d/1Z1njK5FxCZgIUaxxoRUVaK8DFNWP4OGthT6kuFHcC7I/edit?usp=sharing

library(dplyr)
season_data_select <- season_data_select %>% 
                      mutate(player_team = ifelse(str_detect(player, home_lineup), 
                            home, 
                            away))

理想情况下,我正在寻找将引入新列(player_team)的代码,该列将在“ player”列中获取值并检查其是否在“ home_lineup”列中。如果是,则在“ home”列中返回该值。如果不是,则返回“离开”列值。或者,我可以看到它是“如果在'home_lineup'中,返回'home',如果在'away_lineup'中,则返回'away'”

使用时,当前代码返回的值是away,使我相信尝试使用“ player”值引用“ home_lineup”列时会出现问题。所有涉及的变量都在字符类中。

1 个答案:

答案 0 :(得分:1)

由于str_detect是通过字符串和模式矢量化的,因此我们可以使用它。同样,为了获得包含"home""away"关键字的新列,我们可以使用相同的str_detect

library(dplyr)
library(stringr)

season_data_select %>% 
     mutate(player_team = if_else(str_detect(home_lineup, player), home, away), 
            new = c("away", "home")[str_detect(home_lineup, player) + 1])