2011-08-25 70 views
16

Tôi có một vectơ ký tự trong đó mỗi phần tử được bao trong dấu ngoặc đơn. Tôi muốn để xóa các dấu ngoặc và chỉ có chuỗi.Loại bỏ dấu ngoặc đơn khỏi một chuỗi

Vì vậy, tôi đã cố gắng:

n = c("[Dave]", "[Tony]", "[Sara]") 

paste("", n, "", sep="") 

Unforunately, điều này không làm việc cho một số lý do. Tôi đã thực hiện cùng một tác vụ trước khi sử dụng cùng mã này và không chắc chắn tại sao nó không hoạt động lần này.

Tôi muốn đi từ '[Dave]' đến 'Dave'.

Tôi đang làm gì sai?

+0

tôi tò mò tại sao 'paste' lệnh của bạn "làm việc" trong quá khứ ... –

Trả lời

36

Bạn có thể Gsub ra khung như vậy:

n = c("[Dave]", "[Tony]", "[Sara]") 

gsub("\\[|\\]", "", n) 
[1] "Dave" "Tony" "Sara" 
9

Cách thay thế biểu thức chính quy sẽ thực hiện. Hãy xem hàm gsub().

này mang đến cho bạn những gì bạn muốn (nó loại bỏ bất kỳ trường hợp '[' hoặc ']'):

gsub("\\[|\\]", "", n) 
+0

các 'n' là để làm gì? –

5

Các khác câu trả lời là đủ để có được kết quả mong muốn của bạn. Tôi chỉ muốn cung cấp một giải thích ngắn gọn về lý do tại sao những gì bạn đã thử không hoạt động.

pasteghép nối chuỗi ký tự. Nếu bạn paste một chuỗi ký tự trống, "", với một thứ có dấu phân cách cũng là một chuỗi ký tự trống, bạn thực sự chưa thay đổi bất kỳ thứ gì. Vì vậy, paste không thể tạo chuỗi ký tự ngắn hơn; kết quả sẽ giống nhau (như trong ví dụ của bạn) hoặc dài hơn.

2

Nếu làm việc trong tidyverse:

library(tidyverse); library(stringr) 

n = c("[Dave]", "[Tony]", "[Sara]") 

n %>% str_replace_all("\\[|\\]", "") 
[1] "Dave" "Tony" "Sara" 
Các vấn đề liên quan