2016-05-02 10 views
0

私はcarパッケージのrecode()関数を使用して、データフレームの整数クラス変数をコード化しています。変数の値の1つを、単一のアポストロフィ( ')を含む文字列に再コードしようとしています。ただし、これは機能しません。私はそれが単一のアポストロフィーが時期尚早に割り当てを終了するためだと思います。だから、\ 'を使って関数を終了しようとしましたが、どちらも機能しません。R:アポストロフィをrecode()

私はrecode()を使い続けたいと思いますが、それがオプションでない場合は、代替を歓迎します。

作業例:

# Load car() and dplyr() 
library(car) 
library(dplyr) 

# Set up df 
a <- seq(1:3) 
b <- rep(9,3) 
df <- cbind(a,b) %>% as.data.frame(.) 

# Below works because none of the recoding includes an apostrophe: 
recode(df$a, "1 = 'foo'; 2 = 'bar'; 3 = 'foobar'") 

# Below doesn't work due to apostrophe in foofoo's: 
recode(df$a, "1 = 'foo'; 2 = 'bar'; 3 = 'foofoo's'") 

# Exiting doesn't fix it: 
recode(df$a, "1 = 'foo'; 2 = 'bar'; 3 = 'foofoo\'s'") 

答えて

0

我々はそれがbase R代替がそれらを置き換えるために、数値指標としてdf$a値を用いることであろう

recode(df$a, "1 = \"foo\"; 2 = \"bar\"; 3 = \"foofoo's\"") 
#[1] "foo"  "bar"  "foobar's" 

を動作させるために引用符をエスケープでき値

df$a <- c("foo", "bar", "foobar's")[df$a] 
df$a 
#[1] "foo"  "bar"  "foobar's" 

値が数値でなくシーケンス内にないとします。ここで

set.seed(24) 
v1 <- sample(LETTERS[1:3], 10, replace=TRUE) 
v1 
#[1] "A" "A" "C" "B" "B" "C" "A" "C" "C" "A" 
as.vector(setNames(c("foo", "bar", "foobar's"), LETTERS[1:3])[v1]) 
#[1] "foo"  "foo"  "foobar's" "bar"  "bar"  "foobar's" 
#[7] "foo"  "foobar's" "foobar's" "foo" 

は、私たちは "バー" と "foo" という、 "B" と "foobarの者" と "C" と "A" を交換してください。これを行うには、名前付きキー/値ベクトルを作成して 'v1'の値を置き換えます。

関連する問題