提取一些不同长度的字符串

时间:2016-08-02 02:49:43

标签: r string strsplit

假装我有一个矢量:

10, 6, 4, 15

有没有办法解析这个向量,所以我只能存储数值:

adrp x8,l066@PAGE
add x8,x8,l066@PAGEOFF

如果问题只是" 15辆汽车"和#34; 6辆汽车",我知道如何解析它,但我对前面有文字的琴弦也有困难!任何帮助是极大的赞赏。

3 个答案:

答案 0 :(得分:5)

对于这个特殊的常见任务,to_X中有一个名为tidyr的好辅助函数:

extract_numeric

答案 1 :(得分:3)

我们可以\\d+使用模式[0-9]+,这意味着匹配一个或多个数字。它可以写成library(stringr) as.numeric(str_extract(testVector, "\\d+")) #[1] 10 6 4 15

str_extract_all

如果字符串中有多个数字,我们使用list wil1返回base R输出。

这也可以使用as.numeric(regmatches(testVector, regexpr("\\d+", testVector))) #[1] 10 6 4 15 (不使用外部包)

来完成
gsub

或使用base R

中的as.numeric(gsub("\\D+", "", testVector)) #[1] 10 6 4 15
gsub

顺便说一句,有些功能只是使用来自extract_numeric

function (x) { as.numeric(gsub("[^0-9.-]+", "", as.character(x))) }
ext_num <- function(x) {
             as.numeric(gsub("\\D+", "", x))
         }
ext_num(testVector)
#[1] 10  6  4 15

因此,如果我们需要一个函数,我们可以创建一个(不使用任何外部包)

{{1}}

答案 2 :(得分:1)

这也可能会派上用场。

testVector <- gsub("[:A-z:]","",testVector)
testVector <- gsub(" ","",testVector)

> testVector
[1] "10" "6"  "4"  "15"