【问题标题】:Recode several similar variables in R在 R 中重新编码几个类似的变量
【发布时间】:2017-10-17 14:01:56
【问题描述】:

我正在处理一个中等大小的数据集,我有兴趣一次重新编码多个变量。

共有 15 个变量编码为三个级别的因子。是=3,否=2,不适用=1。 我想将所有 15 个变量重新编码为数字。是=1,否=0,不适用=不适用。

在更新我的软件之前,此代码有效。

my_data[, 9:23 := lapply(.SD, recode, "'YES'=1;'NO'=0;'N/A'=NA", as.factor.result= FALSE), .SDcols = 9:23] 

现在我收到一个错误“错误:参数 2 必须命名,而不是未命名” 请让我知道我在这里做错了什么/错过了什么! 提前致谢!

【问题讨论】:

    标签: r dplyr data.table recode


    【解决方案1】:

    以下作品:

    library(dplyr)
    library(data.table)
    
    set.seed(10)
    sampler <- function() as.character(sample(c(1:3), 20, TRUE))
    my_data <- data_frame(
        id = 1:20,
        a = sampler(),
        b = sampler(),
        c = sampler()
    )
    
    dt <- data.table(copy(my_data))
    
    recoder <- function(x) {
        x <- as.integer(x) - 2
        x[x < 0] <- NA
        x
    }
    
    ## data.table approach
    cols <- colnames(dt)[-1]
    dt[ ,(cols) := lapply(.SD, recoder), .SDcols = cols][]
    dt
    
    ## dplyr approach
    my_data  %>%
        mutate_at(vars(a:c), recoder)
    

    【讨论】:

    • 您好,感谢您的回复。不幸的是, data.table 方法只返回 NAs 并且 dplyr 方法的影响为零。难道我做错了什么?这些是字符值(当我之前将它们逐个转换为数字变量时)显示为 3,2,1。是不是我做错了什么?
    • 其实我找到了修改我原来代码的方法:my_data[, 9:23 := lapply(.SD, recode, YES=1,NO=0), .SDcols = 9:23]
    猜你喜欢
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多