将数字重新编码为字符

Recode Numeric To Character

have = data.frame("v1" = c(1,2,3))
want = data.frame("v1" = c("pass", "arb", "rtk"))

我想将数字重新编码为这些字符串。我在 data.table 的尝试失败了:

library(data.table)
have[, c("v1") := recode(v1, 1 == "pass", 2=="arb", 3=="rtk")]

'v1' 可以用作索引,因为它是从 1 开始的一系列值。因此,如果我们按我们想要的顺序传递新向量以重命名,那么 'pass' 将替换 'v1' 中有 1 个值的地方,'arb' 为 2,'rtk' 为 3

library(data.table)
setDT(have)[, v1 := c('pass', 'arb', 'rtk')[v1]]

另一种选择是使用命名向量进行匹配

nm1 <- setNames(c('pass', 'arb', 'rtk'),  1:3)
setDT(have)[, v1 := nm1[as.character(v1)]]

或者使用 factor label 选项

setDT(have)[, v1 := as.character(factor(v1, levels = 1:3, 
           labels = c('pass', 'arb', 'rtk')))]

在 OP 的代码中,recode 使用比较运算符 (==),而不是 =。此外,对于数字值,用反引号

包裹
setDT(have)[, v1  := dplyr::recode(v1, `1` = "pass", `2`="arb", `3`="rtk")]