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

问题描述 投票:-1回答:1

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

r dplyr
1个回答
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

请注意,这与“先生”一词相符字符串中的任何地方,而不仅仅是开头。如果你不想要我使用正则表达式:

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

EDIT:

@docendo discimus指出ifelse()不是必需的,因为我们正在创建一个逻辑列,这正是grepl返回的内容。所以:

df <- df %>% mutate(male = grepl("^Mr\\.", name))

没有dplyr:

df <- transform(df, male = grepl("^Mr\\.", name))
© www.soinside.com 2019 - 2024. All rights reserved.