web-dev-qa-db-ja.com

文字列ベクトルから角括弧を削除する

各要素が角かっこで囲まれている文字ベクトルがあります。角かっこを削除して、文字列だけを取得します。

だから私は試しました:

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

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

残念ながら、これは何らかの理由で機能しません。

この同じコードを使用する前に同じタスクを実行しましたが、今回はなぜ機能しないのかわかりません。

'[Dave]'から'Dave'に移動します。

何が悪いのですか?

24
ATMathew

あなたはそのように括弧をgsubすることができます:

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

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

正規表現の置換がそれを行います。 gsub()関数を見てください。

これにより、必要なものが得られます( '['または ']'のインスタンスはすべて削除されます)。

gsub("\\[|\\]", "", n)
10
dan

他の答えはあなたの望ましい出力を得るために十分でなければなりません。試してもうまくいかなかった理由を簡単に説明したいと思います。

pasteconcatenates文字列。空の文字列をpasteした場合、""、空の文字列でもあるセパレータを含む何かに、あなたは本当に何も変更していません。したがって、pasteは文字列を短くすることはできません。結果は(例のように)同じか、より長くなります。

7
joran

Tidyverse内で作業する場合:

library(tidyverse); library(stringr)

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

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