使用 dplyr 和 stringr:
library(stringr)
library(dplyr)
df <- data.frame(name = c("Mr. Robinson", "Mrs. robinson", "Gandalf","asdMr.dfa"))
df <- df %>% mutate(male = ifelse(str_detect(df$name, fixed("Mr.")), TRUE, FALSE))
输出:
> df
name male
1 Mr. Robinson TRUE
2 Mrs. robinson FALSE
3 Gandalf FALSE
4 asdMr.dfa TRUE
请注意,这与短语“先生”相匹配。字符串中的任何位置,而不仅仅是开头。如果你不想这样,我会使用正则表达式:
df <- df %>% mutate(male = ifelse(str_detect(name, "^Mr\\."), TRUE, FALSE))
> df
name male
1 Mr. Robinson TRUE
2 Mrs. robinson FALSE
3 Gandalf FALSE
4 asdMr.dfa FALSE
这也可以在没有 stringr 包的情况下实现:(受@akrun 启发)
df <- df %>% mutate(male = ifelse(grepl("^Mr\\.", name), TRUE, FALSE))
编辑:
@docendo discimus 指出 ifelse() 不是必需的,因为我们正在创建一个逻辑列,而这正是 grepl 返回的内容。所以:
df <- df %>% mutate(male = grepl("^Mr\\.", name))
没有 dplyr:
df <- transform(df, male = grepl("^Mr\\.", name))