2014-10-07 18 views
11

Tôi muốn viết lệnh strsplit lấy ")" đầu tiên và chia chuỗi.R: strsplit trên ví dụ đầu tiên

Ví dụ:

f("12)34)56") 
"12" "34)56" 

Tôi đã đọc qua nhiều khác regex liên quan SO câu hỏi nhưng tôi sợ tôi không thể thực hiện đứng đầu hoặc đuôi về điều này. Cảm ơn bất kỳ sự trợ giúp nào.

Trả lời

10

Bạn có thể nhận được kết quả tương tự danh sách kiểu như bạn sẽ có strsplit nếu bạn sử dụng regexpr để có được trận đấu đầu tiên, và sau đó kết quả đảo ngược của regmatches.

x <- "12)34)56" 
regmatches(x, regexpr(")", x), invert = TRUE) 
# [[1]] 
# [1] "12" "34)56" 
2

Thay thế ( đầu tiên bằng ký tự không in "\01" và sau đó strsplit trên đó. Bạn có thể sử dụng bất kỳ ký tự nào bạn thích thay cho "\01" miễn là ký tự không xuất hiện.

strsplit(sub(")", "\01", "12)34)56"), "\01") 
+0

Nhờ đề xuất nhưng điều này là nguy hiểm vì nói chung có thể có dấu phẩy trước ')' như 'strsplit (phụ (") ",", ",", 12) 34) 56 "), ",") '. – fsmart

+0

Xem bản sửa đổi. –

2

Một lựa chọn khác là sử dụng str_split trong gói stringr:

library(stringr) 
f <- function(string) 
{ 
    unlist(str_split(string,"\\)",n=2)) 
} 
> f("12)34)56") 
[1] "12" "34)56" 
4

Cần tốc độ? Sau đó, truy cập chức năng stringi. Xem thời gian, ví dụ: here.

library(stringi) 
x <- "12)34)56" 
stri_split_fixed(str = x, pattern = ")", n = 2) 
5

Nó có thể được an toàn hơn để xác định nơi mà các nhân vật là gì và sau đó substring hai bên của nó:

x <- "12)34)56" 
spl <- regexpr(")",x) 
substring(x,c(1,spl+1),c(spl-1,nchar(x))) 
#[1] "12" "34)56" 
Các vấn đề liên quan