R:基于另一列的文本条件更新列

时间:2019-10-25 04:07:29

标签: r if-statement conditional-statements

我想通过使用一条条件语句在数据框中创建新列,该条件语句将显示“如果Column_y包含Column_x,则1否则为0”

例如:

Event   Name     Winner       Loser          New Column
1       James    James,Bob    John,Steve     1
1       Bob      James,Bob    John,Steve     1
1       John     James,Bob    John,Steve     0
1       Steve    James,Bob    John,Steve     0

我希望有新列<-“如果获胜者包含名称,则1否则为0”

请记住,这是100,000行,可能是700个唯一名称。当我尝试

df$NewColumn<-ifelse(grepl(df$Name,df$Winner)==TRUE,1,0) 

或变化,我得到“图案的长度> 1”错误。

2 个答案:

答案 0 :(得分:1)

我认为您只想将Name列与Winner列进行比较:

df$NewColumn <- ifelse(df$Name == df$Winner, 1, 0)

请注意,由于df$Name == df$Winner实际上是一个布尔表达式,因此您还可以简化为:

df$NewColumn <- df$Name == df$Winner

答案 1 :(得分:0)

在您的示例中,精确的字符串匹配有效。但我认为对于您的整个数据而言,它并不成立。

实现包含条件将是这样的:


library(dplyr)
library(purrr)

df = df %>% 
  dplyr::mutate(NewColumn = purrr::map2_dbl(.x=Winner,.y=Name,~ifelse(grepl(.y,.x),1,0)))

使用stringr添加备用解决方案:

df = df %>% 
  dplyr::mutate(NewColumn=ifelse(str_detect(Winner,Name),1,0))

让我知道这是否可行。

P.S .: str_detect更快。