首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R: recode()中的撇号

R: recode()中的撇号
EN

Stack Overflow用户
提问于 2016-05-02 00:13:56
回答 1查看 1.5K关注 0票数 0

我使用car包中的recode()函数来对数据帧中的整数类变量进行重新编码。我试图将变量的一个值重新编码为包含单个撇号(')的字符串。然而,这是行不通的。我想这是因为单撇号过早地结束了分配。因此,我试图使用\‘退出函数,但它也不起作用。

我更愿意继续使用recode(),但如果这不是一个选项,则欢迎使用其他选项。

一个有用的例子:

代码语言:javascript
复制
# 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'")
EN

回答 1

Stack Overflow用户

发布于 2016-05-02 01:21:21

我们可以避开引号,让它起作用。

代码语言:javascript
复制
recode(df$a, "1 = \"foo\"; 2 = \"bar\"; 3 = \"foofoo's\"")
#[1] "foo"      "bar"      "foobar's"

base R的替代方法是使用df$a值作为数值索引来替换这些值。

代码语言:javascript
复制
 df$a <- c("foo", "bar", "foobar's")[df$a]
 df$a
 #[1] "foo"      "bar"      "foobar's"

假设这些值不是数字的,而不是顺序的。

代码语言:javascript
复制
 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‘中的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36973454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档