我有以下格式的一串名字:
names <- c("Q-1234-1", "Q-1234-2", "Q-1234-1-8", "Q-1234-2-8")
我试图在第二个连字符后提取单个数字。有些情况下,名称末尾会有第三个连字符和一个附加数字。所需的输出是:
1, 2, 1, 2
我认为我需要使用sub / gsub,但不知道从哪里开始。有什么建议吗?
答案 0 :(得分:1)
我们可以使用sub
来匹配字符串的开头(-
)中不是[^-]*
(^
)的零个或多个字符的模式通过-
后跟零个或多个不是-
后跟-
的字符以及随后作为一组捕获的数字。在替换中,我们使用捕获的组的反向引用(\\1
)
as.integer(sub("^[^-]*-[^-]*-(\\d).*", "\\1", names))
#[1] 1 2 1 2
或者可以将其修改为
as.integer(sub("^([^-]*-){2}(\\d).*", "\\2", names))
#[1] 1 2 1 2
答案 1 :(得分:0)
这是使用stringr
library("stringr")
names <- c("Q-1234-1", "Q-1234-2", "Q-1234-1-8", "Q-1234-2-8")
output = str_split_fixed(names, pattern = "-", n = 4)[,3]