【问题标题】:Recode Numeric To Character [duplicate]将数字重新编码为字符[重复]
【发布时间】:2020-03-06 20:21:13
【问题描述】:
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")]

【问题讨论】:

    标签: r data.table recode


    【解决方案1】:

    'v1' 可以用作索引,因为它是从 1 开始的值序列。因此,如果我们按照我们想要的顺序传递新向量以重命名,那么 'pass' 将替换任何有 1 个值的位置在“v1”中,“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")]
    

    【讨论】:

    • 这是完美的。我想知道是否有任何方法可以指定“1”等于通过以防其他人查看代码?
    • @bvowe 我更新了一些方法
    • @bvowe 你使用的recode 我假设来自dplyr。请检查我的更新代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多