str_extract_all 小数

str_extract_all with decimal numbers

我有这个数据框 (DF1)

structure(list(ID = 1:3, Temperature = c("temp 37.8 37.6", "37,8 was body temperature", "110 kg and 38 temp")), class = "data.frame", row.names = c(NA, -3L)) 

ID Temperature
1  "temp 37.8 37.6"
2  "37,8 was body temperature"
3  "110 kg and 38 temp"

还有这个模式

Pattern <- paste(c("temp", "Temperature"),collapse="|") 

我想要一个新列,其中包含带十进制数的数字字符串。 小数点字符为“,”和“.”。

所以我想得到这个

ID Temperature                  Number
1  "temp 37.8 37.6"             c(37.8,37.6)
2  "37,8 was body temperature"  37,8
3  "110 kg and 38 temp"         c(110, 38)

我试过了

mutate(Number = ifelse(grepl(Pattern, Temperature), str_extract_all(Temperature, "\s(.*[0-9])$ | \s(,*[0-9])$"), "no"))

但是这个正则表达式只给我一个空字符串。

您可以使用:

stringr::str_extract_all(DF1$Temperature, '\d+([.,]\d+)?')

#[[1]]
#[1] "37.8" "37.6"

#[[2]]
#[1] "37,8"

#[[3]]
#[1] "110" "38" 

其中:

\d+ - 一位或多位数字后跟

可选

[.,] 点或逗号

\d+ - 一个或多个数字。