提取多个不同长度的字符串
Extracting a number of a string of varying lengths
假设我有一个向量:
testVector <- c("I have 10 cars", "6 cars", "You have 4 cars", "15 cars")
有没有办法解析这个向量,这样我就可以只存储数值:
10, 6, 4, 15
如果问题只是“15 辆汽车”和“6 辆汽车”,我知道如何解析它,但我也很难处理前面有文本的字符串!任何帮助是极大的赞赏。
我们可以将str_extract
与模式\d+
一起使用,这意味着匹配一个或多个数字。也可以写成[0-9]+
.
library(stringr)
as.numeric(str_extract(testVector, "\d+"))
#[1] 10 6 4 15
如果一个字符串中有多个数字,我们使用str_extract_all
which will1 return a list
output.
这也可以用 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
对于这个特殊的常见任务,tidyr
中有一个很好的辅助函数,叫做 extract_numeric
:
library(tidyr)
extract_numeric(testVector)
## [1] 10 6 4 15
这或许也能派上用场。
testVector <- gsub("[:A-z:]","",testVector)
testVector <- gsub(" ","",testVector)
> testVector
[1] "10" "6" "4" "15"
假设我有一个向量:
testVector <- c("I have 10 cars", "6 cars", "You have 4 cars", "15 cars")
有没有办法解析这个向量,这样我就可以只存储数值:
10, 6, 4, 15
如果问题只是“15 辆汽车”和“6 辆汽车”,我知道如何解析它,但我也很难处理前面有文本的字符串!任何帮助是极大的赞赏。
我们可以将str_extract
与模式\d+
一起使用,这意味着匹配一个或多个数字。也可以写成[0-9]+
.
library(stringr)
as.numeric(str_extract(testVector, "\d+"))
#[1] 10 6 4 15
如果一个字符串中有多个数字,我们使用str_extract_all
which will1 return a list
output.
这也可以用 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
对于这个特殊的常见任务,tidyr
中有一个很好的辅助函数,叫做 extract_numeric
:
library(tidyr)
extract_numeric(testVector)
## [1] 10 6 4 15
这或许也能派上用场。
testVector <- gsub("[:A-z:]","",testVector)
testVector <- gsub(" ","",testVector)
> testVector
[1] "10" "6" "4" "15"