我试图在半结构化数据中解析一个特定分数的大文件。期望的输出是数字0、1、2、3,如果没有明确说明,则为NEGATIVE=0。在考虑测试代码格式的可变性时,我怎样才能选择数字或负数呢?谢谢你!
期望输出:2 2 0 0 3 0 0
a <- c("COMP): intermediate (score 2+)",
"COMP) intermediate (FOCAL 2+)",
"COMP) IS NEGATIVE (0)",
"COMP) is negative (0)",
"COMP is POSITIVE (3+)",
"COMP) NEGATIVE IN",
"COMP) NEGATIVE (0)")
COMPpattern <- "COMP\)[:|\s]*(.*?)(?=\)*)"
str_match(toupper(a), COMPpattern)[,2]
如果您想要的数字总是每个字符串中的第一个(可能有多个)数字,那么您可以只提取第一个而忽略其余的。
out <- as.integer(stringr::str_extract(a, "\d+"))
out
# [1] 2 2 0 0 3 NA 0
或者,以R为底,
out <- suppressWarnings(as.integer(gsub("^\D*(\d+).*", "\1", a)))
从这里开始,更改"负"字。到0,我们可以从两个选项中选择(根据您的需要):
### if "negative" triggers 0 only when no other number
replace(out, is.na(out) & grepl("negative", a, ignore.case = TRUE), 0)
# [1] 2 2 0 0 3 0 0
### if "negative" should override any number found, remove is.na(out)
replace(out, grepl("negative", a, ignore.case = TRUE), 0)
(如重新赋值给out
)。
(我承认这个方法忽略了你的许多"父母";和";words"我不确定这是否是对问题的过度简化。