在R中重新编码几个类似的变量

时间:2017-10-17 14:01:56

标签: r dplyr data.table recode

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

有15个变量被编码为具有三个级别的因子。 YES = 3,NO = 2,N / A = 1。 我想将所有15个变量重新编码为数字。 YES = 1,NO = 0,N / A = NA。

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

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

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

1 个答案:

答案 0 :(得分:0)

以下作品:

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)