我有一个字符向量t
,如下所示。
t <- c("GID456 SPK711", "GID456 GID667 VINK", "GID45345 DNP990 GID2345",
"GID895 GID895 K350")
我想提取所有以GID开头的字符串,然后是一系列数字。
这样可行,但不会检索多个实例。
gsub(".*(GID\\d+).*", "\\1", t)
[1] "GID456" "GID667" "GID2345" "GID895"
在这种情况下如何提取所有字符串?所需的输出如下
out <- c("GID456", "GID456", "GID667", "GID45345", "GID2345",
"GID895", "GID895")
答案 0 :(得分:11)
这是一种使用包的方法我维护qdapRegex(我更喜欢这个或stringi / stringr)来保持一致性和易用性。我还展示了一种基本方法。无论如何,我更多地将其视为&#34;提取&#34;问题而不是问题。
y <- c("GID456 SPK711", "GID456 GID667 VINK", "GID45345 DNP990 GID2345",
"GID895 GID895 K350")
library(qdapRegex)
unlist(ex_default(y, pattern = "GID\\d+"))
## [1] "GID456" "GID456" "GID667" "GID45345" "GID2345" "GID895" "GID895"
在基地R:
unlist(regmatches(y, gregexpr("GID\\d+", y)))
答案 1 :(得分:3)
通过gsub
> t <- c("GID456 SPK711", "GID456 GID667 VINK", "GID45345 DNP990 GID2345",
+ "GID895 GID895 K350")
> unlist(strsplit(gsub("(GID\\d+)|.", "\\1 ", t), "\\s+"))
[1] "GID456" "GID456" "GID667" "GID45345" "GID2345"
[6] "GID895" "GID895"
答案 2 :(得分:1)
我使用了str_split
包
stringr
函数
library(stringr)
word.list = str_split(t, '\\s+')
new_list <- unlist(word.list)
new_list[grep("GID", new_list)]
我希望这会有所帮助。
答案 3 :(得分:1)
我迟到了,但这个整齐的单行可能对某人有用。
使用stringr + dplyr:
t <- c("GID456 SPK711", "GID456 GID667 VINK", "GID45345 DNP990 GID2345", "GID895 GID895 K350")
str_extract_all(t, regex("GID\\d+")) %>% unlist()
给出:
[1] "GID456" "GID456" "GID667" "GID45345" "GID2345" "GID895" "GID895"