2015-11-27 13 views
7

アルファベット[a-z]、スペース[]、アポストロフィ[']を含む文字列変数があります。 x <- "a'b c" アポストロフィ[']を空白[]に置き換え、空白[]をアンダースコア[_]に置き換えます。複数の文字列をRの1つのgsub()またはchartr()ステートメントに置き換えます。

x <- gsub("'", "", x) 
x <- gsub(" ", "_", x) 

これは絶対に動作しますが、状態が多いとコードが醜くなります。したがって、chartr()を使用しますが、chartr()は空白を扱うことはできません。

x <- chartr("' ", "_", x) 
#Error in chartr("' ", "_", "a'b c") : 'old' is longer than 'new' 

この問題を解決する方法はありますか?ありがとう!

+1

あなたはすでに2つのgsubで解決しました。それがあまりにも醜いと思われる場合は、あなたが "可愛い"と思う独自のラッパー関数を作成することができます。しかし、 "空白"は文字ではないので、 'chartr'を使うことはできません。それは文字の欠如です。 – MrFlick

答えて

5

あなたは、私がmagrittrパッケージから%<>%%>% opperatorsが提供する構文のファンですgsubfn

library(gsubfn) 
gsubfn(".", list("'" = "", " " = "_"), x) 
# [1] "ab_c" 
9

使用することができます。

library(magrittr) 

x <- "a'b c" 

x %<>% 
    gsub("'", "", .) %>% 
    gsub(" ", "_", .) 
x 
##[1] "ab_c" 

gusbfn素晴らしいですが、私は、連鎖%>%ができますね。

+1

第3引数 "の意味は何ですか?" in gsub() – Ali

+2

デフォルトでは、 '%>%'の左側のオブジェクトは、右側の最初の引数に* piped *されています。 LHSが、この例のように3番目の引数である必要がある場合、 '.'はプレースホルダです。詳細は 'vignette(" magrittr ")'を参照してください。 – Peter

0
gsub("\\s", "", chartr("' ", " _", x)) # Use whitespace and then remove it 
0

私も、magrittrおよび/またはdplyrソリューションを選ぶでしょう。しかし、私はオブジェクトの新しいコピーを作成しないことを望んでいます。特にオブジェクトが関数内にあり、安く返すことができます。

すなわち

return(
    catInTheHat %>% gsub('Thing1', 'Thing2', .) %>% gsub('Red Fish', 'Blue 
    Fish', .) 
) 

...というように。

関連する問題