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