我有一个像这样的data.table:
names <- c("Jones, Mr. Adam", "Sands, Mrs. Julie", "Andrews, Dr. Michael")
dat <- data.table(names=names)
我想根据names列创建一个标题列。我可以这样做:
dat[str_detect(names, "Mrs."), title := "Mrs."]
dat[str_detect(names, "Mr."), title := "Mr."]
dat[str_detect(names, "Dr."), title := "Dr."]
但是正在寻找一种更有效的data.table方法(尝试使用lapply)使用向量(例如c(“Mrs。”,“Mr。”,“Dr。”)。
答案 0 :(得分:1)
我们可以使用sub
从'names'列中提取子字符串
dat[, title := sub("\\w+,\\s+(\\S+)\\s.*", "\\1", names)]
dat
# names title
#1: Jones, Mr. Adam Mr.
#2: Sands, Mrs. Julie Mrs.
#3: Andrews, Dr. Michael Dr.
或str_extract
library(stringr)
dat[, title := str_extract(names, "[A-Z][a-z]+\\.")]
dat <- data.table(names=names)