2011-08-25 18 views
16

Mam wektor znaków, w którym każdy element jest ujęty w nawiasy. Chcę, aby usunąć nawiasy i po prostu mieć ciąg.Usuwanie nawiasów ze stringa

Tak próbowałem:

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

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

Unforunately, to nie działa z jakiegoś powodu. Wykonałem to samo zadanie przed użyciem tego samego kodu i nie jestem pewien, dlaczego tym razem nie działa.

Chcę przejść od '[Dave]' do 'Dave'.

Co robię źle?

+0

Jestem ciekaw dlaczego 'paste' komenda "pracował" w przeszłości ... –

Odpowiedz

36

Można gsub się nawiasy tak:

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

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

Dokonane zostanie zastępowanie wyrażenia regularnego. Spójrz na funkcję gsub().

Daje ci to co chcesz (nie usuwa instancję '[' i ']'):

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

Co to jest 'n' dla? –

5

Inny odpowiedzi powinny wystarczyć, aby uzyskać pożądany wynik. Chciałem tylko przedstawić krótkie wyjaśnienie, dlaczego to, co próbowałeś, nie zadziałało.

pastełączy się ze znakami. Jeśli masz paste pusty ciąg znaków, "", do czegoś z separatorem, który jest również pustym ciągiem znaków, naprawdę nic nie zmieniłeś. Tak więc paste nie może skrócić łańcucha znaków; wynik będzie taki sam (jak w twoim przykładzie) lub dłuższy.

2

przypadku pracy w tidyverse:

library(tidyverse); library(stringr) 

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

n %>% str_replace_all("\\[|\\]", "") 
[1] "Dave" "Tony" "Sara"