检查短语是否包含某个单词

时间:2018-01-04 09:08:12

标签: r dplyr

我有一个包含随机名称的列。我想创建一个代码,创建另一个列(使用mutate函数),检查名称是否包含单词“Mr.”这将导致新列生成“男性”

1 个答案:

答案 0 :(得分:1)

使用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

请注意,这与短语&#34; Mr。&#34;字符串中的任何地方,而不仅仅是开头。如果你不想要我使用正则表达式:

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))