我想通过使用一条条件语句在数据框中创建新列,该条件语句将显示“如果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”错误。
答案 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
更快。