0

我正在使用 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'")
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 回答