我已经在以下链接中提出了类似的问题:从字符串中提取基于特定术语的数字:
我需要推断出月和日的信息,以形成:
我有一些混乱的数据需要从字符串变量中提取判刑期限,但输入不规范。 我需要将一个人被判入‘监狱’或‘拘留所’的月数或天数提取到月份
和天数
变量中,同时忽略字符串中的其他任何数字(例如社区服务的天数)。
因此,如果我的数据如下:
library(data.table)
data<-data.table(text=c("Person 1: $1000 fine, 31 months jail",
"Person 2: $500 fine, 45 days jail",
"Person 3: 35 dys jail",
"Person 4: 14 mnths prison, 30 days community release"))
data
text
1: Person 1: $1000 fine, 31 months jail
2: Person 2: $500 fine, 45 days jail
3: Person 3: 35 dys jail
4: Person 4: 14 mnths prison, 30 days community release
我需要推断出月和日的信息,以形成:
library(data.table)
data<-data.table(text=c("Person 1: $1000 fine, 31 months jail",
"Person 2: $500 fine, 45 days jail",
"Person 3: 35 dys jail",
"Person 4: 14 mnths prison, 30 days community release"),
months=c("31","","","14"),
days=c("","45","35",""))
data
text months days
1: Person 1: $1000 fine, 31 months jail 31
2: Person 2: $500 fine, 45 days jail 45
3: Person 3: 35 dys jail 35
4: Person 4: 14 mnths prison, 30 days community release 14
我一直在尝试使用 library(qdap)
并调整以下代码,以解决我之前提出的问题:
library(dplyr)
data <- dplyr::mutate(data,
months = stringr::str_extract(text, "\\d+(?=\\s*months*)"),
days = stringr::str_extract(text, "\\d+(?=\\s*days*)"))
然而,我所做的一切都没有起作用。不可否认,文本分析是我的弱点,我很快意识到用类似于str_extract(text, "\\d+(?=\\s*days|dys* jail|prison)")
替换上述代码没有任何效果。
如果您能提供任何帮助,将不胜感激。我正在试图想出一种编码方式,以便不被迫手动编写数千个观察结果。
strcapture
函数翻译 -strcapture(pattern = regex, data$text, proto=list(months=1L,days=1L), perl=TRUE)
。 - thelatemail