将数字重新编码为字符
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")]
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")]