如何从混合字符串中提取数字
How to extract numbers from mixed strings
我有一个字符串的字符向量,它可以是整数或形式为“Pn[ab]?”
> figc
[1] "3" "2" "7" "8" "10" "3" "4" "6" "P3a" "P3b" "5" "P9"
[13] "1" "13" "15" "18" "21" "22" "5" "6" "9" "1" "13" "14"
[25] "15"
我想将它们转换为数字,其中“P3a”的结果是 3,而“P9”的结果是 9。
我试过了:
fig <- ifelse(substr(figc, 1, 1)=="P",
as.numeric(substr(figc, 2, 1)),
as.numeric(figc))
给予:
> fig <- ifelse(substr(figc, 1, 1)=="P",
+ as.numeric(substr(figc, 2, 1)),
+ as.numeric(figc))
Warning message:
In ifelse(substr(figc, 1, 1) == "P", as.numeric(substr(figc, 2, :
NAs introduced by coercion
>
> fig
[1] 3 2 7 8 10 3 4 6 NA NA 5 NA 1 13 15 18 21 22 5 6 9 1 13 14 15
但是对于非数字的,我得到了 NA。如何解决这个问题?我查看了 stringr
包,但看不到任何有助于解决这个简单问题的东西
我们可以使用parse_number
library(readr)
parse_number(figc)
[1] 3 2 7 8 10 3 4 6 3 3 5 9 1 13 15 18 21 22 5 6 9 1 13 14 15
数据
figc <- c("3", "2", "7", "8", "10", "3", "4", "6", "P3a", "P3b", "5",
"P9", "1", "13", "15", "18", "21", "22", "5", "6", "9", "1",
"13", "14", "15")
使用str extract
和字符class \d
:
library(stringr)
str_extract(string, "\d+")
[1] "3" "2" "6" "3" "3" "5" "9"
或者,在base R
中,您可以使用否定字符class \D
,匹配任何非数字字符,并将其删除:
gsub("\D", "", string)
数据:
string <- c("3","2", "6", "P3a", "P3b", "5", "P9")
我们可以使用 gsub
删除所有字母:
as.numeric(gsub("[[:alpha:]]", "", figc))
[1] 3 2 7 8 10 3 4 6 3 3 5 9 1 13 15 18 21 22 5 6 9 1 13 14 15
我有一个字符串的字符向量,它可以是整数或形式为“Pn[ab]?”
> figc
[1] "3" "2" "7" "8" "10" "3" "4" "6" "P3a" "P3b" "5" "P9"
[13] "1" "13" "15" "18" "21" "22" "5" "6" "9" "1" "13" "14"
[25] "15"
我想将它们转换为数字,其中“P3a”的结果是 3,而“P9”的结果是 9。
我试过了:
fig <- ifelse(substr(figc, 1, 1)=="P",
as.numeric(substr(figc, 2, 1)),
as.numeric(figc))
给予:
> fig <- ifelse(substr(figc, 1, 1)=="P",
+ as.numeric(substr(figc, 2, 1)),
+ as.numeric(figc))
Warning message:
In ifelse(substr(figc, 1, 1) == "P", as.numeric(substr(figc, 2, :
NAs introduced by coercion
>
> fig
[1] 3 2 7 8 10 3 4 6 NA NA 5 NA 1 13 15 18 21 22 5 6 9 1 13 14 15
但是对于非数字的,我得到了 NA。如何解决这个问题?我查看了 stringr
包,但看不到任何有助于解决这个简单问题的东西
我们可以使用parse_number
library(readr)
parse_number(figc)
[1] 3 2 7 8 10 3 4 6 3 3 5 9 1 13 15 18 21 22 5 6 9 1 13 14 15
数据
figc <- c("3", "2", "7", "8", "10", "3", "4", "6", "P3a", "P3b", "5",
"P9", "1", "13", "15", "18", "21", "22", "5", "6", "9", "1",
"13", "14", "15")
使用str extract
和字符class \d
:
library(stringr)
str_extract(string, "\d+")
[1] "3" "2" "6" "3" "3" "5" "9"
或者,在base R
中,您可以使用否定字符class \D
,匹配任何非数字字符,并将其删除:
gsub("\D", "", string)
数据:
string <- c("3","2", "6", "P3a", "P3b", "5", "P9")
我们可以使用 gsub
删除所有字母:
as.numeric(gsub("[[:alpha:]]", "", figc))
[1] 3 2 7 8 10 3 4 6 3 3 5 9 1 13 15 18 21 22 5 6 9 1 13 14 15