如何根据data.table列中的字符串对行进行分类

时间:2017-06-13 19:00:56

标签: r data.table stringr

我有一个像这样的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。”)。

1 个答案:

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