如何从R中的字符串中拆分十进制数

时间:2015-03-02 21:28:15

标签: r

例如:

c("2.11abc","15.1cde",".562342rfg")

如何将数字拆分出来? 我想要的载体是

c(2.11, 15.1, 0.562342)

我试过

gsub("[^[:digit:]]", "", a)

但结果是

c(211, 151 ,562342)

我非常感谢你的帮助。

4 个答案:

答案 0 :(得分:7)

如果有更麻烦的字符串,其中某些句点可能出现在字符串的数字部分之外,您可能想要使用这样的字符。

library(gsubfn)

## A possibly more realistic character vector
x <- c("2.11abc.def","a.b-15.1cde",".562342rfg", "abcdef")

getNumberPart <- function(x) {
    pat <- "(-?(\\d*\\.*\\d+|\\d+\\.))"
    strapply(x, pattern=pat, FUN=as.numeric, simplify=TRUE, empty=NA)
}

getNumberPart(x)
# [1]  2.110000 -15.100000   0.562342         NA

请注意,如果字符串包含多个数字,strapply()将提取所有数字,并将整个结果作为列表(而不是简单的向量)返回,每个输入字符串包含一个列表元素。

答案 1 :(得分:6)

你错过了这段时间:

as.numeric(gsub("[^[:digit:].]", "", c("2.11abc","15.1cde",".562342rfg")))
# [1]  2.110000 15.100000  0.562342

答案 2 :(得分:1)

为了简化使用,我建议查看&#34; qdapRegex&#34;包,你可以做:

x <- c("2.11abc.def","a.b15.1cde","-.562342rfg", "abcdef")

library(qdapRegex)
rm_number(x, extract = TRUE)
# [[1]]
# [1] "2.11"
# 
# [[2]]
# [1] "15.1"
# 
# [[3]]
# [1] "-.562342"
# 
# [[4]]
# [1] NA

答案 3 :(得分:0)

这应该有所帮助。

a <- c("2.11abc","15.1cde",".562342rfg")
substr(a, 1, regexpr("[a-zA-Z]", a)-1)