我已经在以下位置询问过这个版本:
Extracting Numbers Based On the Following Term in a String :
我有一些困惑的数据,我需要从没有真正统一输入的字符串变量中提取句子长度。我需要在 months
和 days
变量中输入一个人被判处“ jail ”或“ jail ”的月数或天数,同时忽略变量中的任何其他数字字符串(例如,社区服务天数)。
如果我有数据
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)")
不执行任何操作。
如果您能提供任何帮助,我们将不胜感激。试图找出一种编码方法,这样我就不必手动编码数千个观察结果。
最佳答案
我们可以使用 tidyr::extract
来匹配一个数字,后跟一个以 "m"
或 "d"
开头的单词然后是 jail 或 jail 。
tidyr::extract(data, text, into = c("months", "days"),
regex = ".*?(\\d+)\\sm.*\\s(?=jail|prison)|.*?(\\d+)\\sd.*\\s(?=jail|prison)",
remove = FALSE, convert = TRUE)
# text months days
#1: Person 1: $1000 fine, 31 months jail 31 NA
#2: Person 2: $500 fine, 45 days jail NA 45
#3: Person 3: 35 dys jail NA 35
#4: Person 4: 14 mnths prison, 30 days community release 14 NA
我们还可以将模式组合在一起并使其更短,但由于我们需要两个不同的列,其中包含 "month"
和 "days"
信息,我重复了该模式“|”
。
@thelatemail 建议使用 strcapture
的基本 R 版本
strcapture(".*?(\\d+)\\sm.*\\s(?=jail|prison)|.*?(\\d+)\\sd.*\\s(?=jail|prison)",
data$text, proto=list(months=1L,days=1L), perl=TRUE)
关于r - 从字符串中提取允许单词变化的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59365490/