从r中的字符串中提取数字
您好,如何从文本中提取介于两个破折号之间的数字 以下是一个示例数据集:从r中的字符串中提取数字,r,string,extract,R,String,Extract,您好,如何从文本中提取介于两个破折号之间的数字 以下是一个示例数据集: text.var <- c("abd-GEN-eft-na-M-D-BINED-10-XX1","abd-GEN-eft-na-M-D-BINED-2-XX2","abd-GEN-eft-na-M-D-BINED-3-XX1") id <- c(1,2,3) data <- data.frame("id"=id,"text"=text.var) > data id
text.var <- c("abd-GEN-eft-na-M-D-BINED-10-XX1","abd-GEN-eft-na-M-D-BINED-2-XX2","abd-GEN-eft-na-M-D-BINED-3-XX1")
id <- c(1,2,3)
data <- data.frame("id"=id,"text"=text.var)
> data
id text
1 1 abd-DEF-eft-na-M-D-BINED-10-XX1
2 2 abd-DEF-eft-na-M-D-BINED-2-XX2
3 3 abd-DEF-eft-na-M-D-BINED-3-XX1
有人能给点提示吗
谢谢您可以使用sub和正则表达式来完成此操作
text.var <- c("abd-GEN-eft-na-M-D-BINED-10-XX1","abd-GEN-eft-na-M-D-BINED-2-XX2","abd-GEN-eft-na-M-D-BINED-3-XX1")
id <- c(1,2,3)
number = as.numeric(sub(".*-(\\d+)-.*", "\\1", text.var))
data <- data.frame("id"=id,"text"=text.var, number)
data
id text number
1 1 abd-GEN-eft-na-M-D-BINED-10-XX1 10
2 2 abd-GEN-eft-na-M-D-BINED-2-XX2 2
3 3 abd-GEN-eft-na-M-D-BINED-3-XX1 3
多一点细节
在正则表达式中,\\d+-选择由破折号包围的数字序列。我将括号括在\d部分周围,以存储找到的获取-\\d+-..*前后-\\d+-匹配所有其他字符。因此sub将用数字替换整个字符串。这会给出带数字的字符串。我使用as.numeric将它们转换成数字而不是字符串 您可以使用sub和正则表达式来实现这一点
text.var <- c("abd-GEN-eft-na-M-D-BINED-10-XX1","abd-GEN-eft-na-M-D-BINED-2-XX2","abd-GEN-eft-na-M-D-BINED-3-XX1")
id <- c(1,2,3)
number = as.numeric(sub(".*-(\\d+)-.*", "\\1", text.var))
data <- data.frame("id"=id,"text"=text.var, number)
data
id text number
1 1 abd-GEN-eft-na-M-D-BINED-10-XX1 10
2 2 abd-GEN-eft-na-M-D-BINED-2-XX2 2
3 3 abd-GEN-eft-na-M-D-BINED-3-XX1 3
多一点细节
在正则表达式中,\\d+-选择由破折号包围的数字序列。我将括号括在\d部分周围,以存储找到的获取-\\d+-..*前后-\\d+-匹配所有其他字符。因此sub将用数字替换整个字符串。这会给出带数字的字符串。我使用as.numeric将它们转换成数字而不是字符串 您可以使用stringr包中的str_extract函数:
library(stringr)
str_extract(text.var, "(?<=-)[0-9]+(?=-)")
您可以使用stringr包中的str_extract函数:
library(stringr)
str_extract(text.var, "(?<=-)[0-9]+(?=-)")
我们可以使用stru提取
我们可以使用stru提取