例如:
c("2.11abc","15.1cde",".562342rfg")
如何将数字拆分出来? 我想要的载体是
c(2.11, 15.1, 0.562342)
我试过
gsub("[^[:digit:]]", "", a)
但结果是
c(211, 151 ,562342)
我非常感谢你的帮助。
答案 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)