我在自由文本中有一些数据。我已经设法将它构造成这样的东西:
“患者白细胞10.3,血红蛋白11.6,BNP 2,000,乳酸1.5。”
所需的输出是:
白细胞= 10.3
血红蛋白= 11.6
乳酸= 1.5。
BNP = 2,000
这个或具有2列的数据框(一个用于变量,另一个用于值)。任何提取此类信息的智能方法。 提前谢谢。
答案 0 :(得分:1)
您可以尝试:
sapply(strsplit(gsub("^.*has ","",aa),", ")[[1]],
function(bio){paste(gsub("[0-9.,]","",bio),gsub("[a-zA-Z]","",bio),sep="=")})
用你的例子,它给出了:
White blood cells 10.3 hemoglobin 11.6 BNP 2,000 lactic acid 1.5.
"White blood cells = 10.3" "hemoglobin = 11.6" "BNP = 2,000 " "lactic acid = 1.5. "
答案 1 :(得分:1)
您可以使用str_extract
stringr
library(stringr)
number <- str_extract_all(str1, '[0-9]+.[0-9]+')[[1]]
word <- sub('The patient has', '',
str_extract_all(str1, perl('[^0-9.,]+ (?=[0-9])'))[[1]])
data.frame(word, number)
# word number
#1 White blood cells 10.3
#2 hemoglobin 11.6
#3 BNP 2,000
#4 lactic acid 1.5
如果您的文件与非标准条目不同,最好创建一个包含所有唯一字词的“密钥”
key <- c('White blood cells', 'hemoglobin', 'BNP', 'lactic acid')
pat <- paste(key, collapse="|")
word <- str_extract_all(str1, pat)[[1]]
word
#[1] "White blood cells" "hemoglobin" "BNP"
#[4] "lactic acid"
如上所示提取“数字”。
我更改了正则表达式模式以匹配没有小数的数字
str_extract_all(str2, '[0-9]+(.[0-9]+)?')[[1]]
#[1] "10" "11.6" "2000" "1.5"
样本
[0-9]+(.[0-9]+)?
str1 <- "The patient has White blood cells 10.3, hemoglobin 11.6, BNP 2,000 , lactic acid 1.5. "
str2 <- "The patient has White blood cells 10, hemoglobin 11.6, BNP 2000 , lactic acid 1.5. "
答案 2 :(得分:1)
或者你可以尝试类似的东西
gsub("(\\s)(?=\\d)", " = ",
strsplit(gsub("The patient has ", "", str), ", ")[[1]],
perl = TRUE)
## [1] "White blood cells = 10.3" "hemoglobin = 11.6" "BNP = 2,000 " "lactic acid = 1.5."
数据强>
str <- "The patient has White blood cells 10.3, hemoglobin 11.6, BNP 2,000 , lactic acid 1.5."