2015-05-12 18 views
7

Tôi có một vector ký tự t như sau.Trích xuất nhiều mẫu của một mẫu từ một chuỗi trong R

t <- c("GID456 SPK711", "GID456 GID667 VINK", "GID45345 DNP990 GID2345", 
    "GID895 GID895 K350") 

Tôi muốn trích xuất tất cả các chuỗi bắt đầu bằng GID và theo sau là một chuỗi các chữ số.

Công trình này, nhưng không truy lục nhiều phiên bản.

gsub(".*(GID\\d+).*", "\\1", t) 
[1] "GID456" "GID667" "GID2345" "GID895" 

Làm cách nào để trích xuất tất cả các chuỗi trong trường hợp này? Sản lượng mong muốn như sau

out <- c("GID456", "GID456", "GID667", "GID45345", "GID2345", 
     "GID895", "GID895") 

Trả lời

10

Đây là một cách tiếp cận bằng cách sử dụng một gói tôi duy trì qdapRegex (Tôi thích điều này hoặc stringi/stringr) để phù hợp và dễ sử dụng. Tôi cũng cho thấy một cách tiếp cận cơ sở. Trong mọi trường hợp, tôi sẽ xem xét vấn đề này như một vấn đề "khai thác" hơn là một vấn đề phụ.

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" 

Trong cơ sở R:

unlist(regmatches(y, gregexpr("GID\\d+", y))) 
1

Tôi đã sử dụng str_split chức năng từ stringr gói

library(stringr) 
word.list = str_split(t, '\\s+') 
new_list <- unlist(word.list) 
new_list[grep("GID", new_list)] 

Tôi hy vọng điều này sẽ giúp.

3

Qua 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" 
Các vấn đề liên quan