我使用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'")发布于 2016-05-02 01:21:21
我们可以避开引号,让它起作用。
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‘中的值。
https://stackoverflow.com/questions/36973454
复制相似问题