R:重新编码中的撇号()

时间:2016-05-02 00:13:57

标签: r encoding recode

我正在使用car包中的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'")

1 个答案:

答案 0 :(得分: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" 

在这里,我们取代&#34; A&#34;与&#34; foo&#34;,&#34; B&#34;用&#34; bar&#34;和&#34; C&#34;与&#34; foobar&#34;。为此,请创建命名键/值向量以替换&#39; v1&#39;中的值。