我正在使用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'")
答案 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;中的值。