0

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

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'")
4

1 に答える 1

0

引用符をエスケープして機能させることができます

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

別の方法は、値を数値インデックスとしてbase R使用して、それらの値を置き換えることですdf$a

 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" 

ここでは、「A」を「foo」に、「B」を「bar」に、「C」を「foobar's」に置き換えます。これを行うには、'v1' の値を置き換える名前付きキー/値ベクトルを作成します。

于 2016-05-02T01:21:21.107 に答える