从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提取