R从字符串/文本中提取字符数对

时间:2015-01-28 09:29:39

标签: r

我在自由文本中有一些数据。我已经设法将它构造成这样的东西:

“患者白细胞10.3,血红蛋白11.6,BNP 2,000,乳酸1.5。”

所需的输出是:

白细胞= 10.3

血红蛋白= 11.6

乳酸= 1.5。

BNP = 2,000

这个或具有2列的数据框(一个用于变量,另一个用于值)。任何提取此类信息的智能方法。 提前谢谢。

3 个答案:

答案 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"    

如上所示提取“数字”。

UPDATE2

我更改了正则表达式模式以匹配没有小数的数字

 str_extract_all(str2, '[0-9]+(.[0-9]+)?')[[1]]
 #[1] "10"   "11.6" "2000" "1.5" 

样本

[0-9]+(.[0-9]+)?

Regular expression visualization

Debuggex Demo

数据

 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."