似乎无法让 stringr() 恰好适合 mid-string 提取
Can't seem to get stringr() just right for mid-string extraction
我想从 Name
列中提取标题(先生、夫人、小姐),并将这些提取的标题导入新列 Title
。相关数据如下:
snippet <- data_frame(Name=c('Braund, Mr. Owen Harris','Cumings, Mrs. John Bradley','Heikkinen, Miss. Laina'),Column=c('blah','blah,'blah'))
我已经查看了 ,但我一定遗漏了一些东西。
这是我能想到的最佳代码:snippet <- mutate(snippet, Title = str_extract(snippet $Name, "(?<=,)[^,]*(?=.)")
。这确实添加了 Title
列,但该列中的所有值都是 NA。我的错误在哪里?谢谢。
也许这有帮助 - 在 'Name' 列中,,
之后有一个 space,因此我们使用正则表达式查找来匹配 non-whitespace 个字符(\S+
) 在 ,
和 space ((?<=, )
) 之后并在 .
之前成功(.
是元字符,所以我们转义,否则它匹配任何字符)
library(dplyr)
library(stringr)
snippet <- snippet %>%
mutate(Title = str_extract(Name, "(?<=, )\S+(?=\.)"))
-输出
snippet
# A tibble: 3 × 3
Name Column Title
<chr> <chr> <chr>
1 Braund, Mr. Owen Harris blah Mr
2 Cumings, Mrs. John Bradley blah Mrs
3 Heikkinen, Miss. Laina blah Miss
数据
snippet <- structure(list(Name = c("Braund, Mr. Owen Harris",
"Cumings, Mrs. John Bradley",
"Heikkinen, Miss. Laina"), Column = c("blah", "blah", "blah")),
class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -3L))
我想从 Name
列中提取标题(先生、夫人、小姐),并将这些提取的标题导入新列 Title
。相关数据如下:
snippet <- data_frame(Name=c('Braund, Mr. Owen Harris','Cumings, Mrs. John Bradley','Heikkinen, Miss. Laina'),Column=c('blah','blah,'blah'))
我已经查看了
这是我能想到的最佳代码:snippet <- mutate(snippet, Title = str_extract(snippet $Name, "(?<=,)[^,]*(?=.)")
。这确实添加了 Title
列,但该列中的所有值都是 NA。我的错误在哪里?谢谢。
也许这有帮助 - 在 'Name' 列中,,
之后有一个 space,因此我们使用正则表达式查找来匹配 non-whitespace 个字符(\S+
) 在 ,
和 space ((?<=, )
) 之后并在 .
之前成功(.
是元字符,所以我们转义,否则它匹配任何字符)
library(dplyr)
library(stringr)
snippet <- snippet %>%
mutate(Title = str_extract(Name, "(?<=, )\S+(?=\.)"))
-输出
snippet
# A tibble: 3 × 3
Name Column Title
<chr> <chr> <chr>
1 Braund, Mr. Owen Harris blah Mr
2 Cumings, Mrs. John Bradley blah Mrs
3 Heikkinen, Miss. Laina blah Miss
数据
snippet <- structure(list(Name = c("Braund, Mr. Owen Harris",
"Cumings, Mrs. John Bradley",
"Heikkinen, Miss. Laina"), Column = c("blah", "blah", "blah")),
class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -3L))