我的代码中有一个返回的字符串:(<C1>, 4.297, %)
我试图使用gsub命令从该字符串中仅提取值4.297:
Fat<-gsub("\\D", "", stringV)
然而,这不仅提取了4.297,而且提取了数字&#39; 1&#39;在C1。 有没有办法从这个字符串中提取4.297,请帮助。
由于
答案 0 :(得分:3)
这个怎么样?
# Your sample character string
ss <- "(<C1>, 4.297, %)";
gsub(".+,\\s*(\\d+\\.\\d+),.+", "\\1", ss)
#[1] "4.297"
或
gsub(".+,\\s*([0-9\\.]+),.+", "\\1", ss)
如有必要,请使用as.numeric
转换为数字。
答案 1 :(得分:2)
另一个选项是str_extract
,以便将一个或多个数字元素与.
匹配,并以字边界开头,后跟字边界(\\b
)
library(stringr)
as.numeric(str_extract(stringV, "\\b[0-9.]+\\b"))
#[1] 4.297
如果有多个号码,请使用str_extract_all
stringV <- "(<C1>, 4.297, %)"
答案 2 :(得分:2)
另一种方法是将您的矢量视为逗号分隔变量,并使用read.csv
df <- read.csv(text = stringV, colClasses = c("character", "numeric", "character"), header = F)
V1 V2 V3
1 (<C1> 4.297 %)
此方法依赖于向量中“第二”位置的“数字”。
答案 3 :(得分:2)
您可以使用as.numeric
将无数字字符串转换为NA
。
ss <- as.numeric(unlist(strsplit(stringV, ',')))
ss[!is.na(ss)]
#[1] 4.297