2017-10-17 65 views
-1

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

有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必须是命名,而不是无名” 请让我知道我在做什么错误/缺少在这里! 在此先感谢!

回答

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) 
+0

嘿感谢您的答复。 不幸的是,data.table方法只返回NAs,而dplyr方法没有影响。难道我做错了什么?这些是字符值(当我以前通过变量将它们转换为数字变量时)显示为3,2,1。有什么我做错了吗? – kemanli

+0

我编辑了一下,现在试试看它是如何工作的 –

+0

我实际上找到了一种方法来修改我的原代码: my_data [,9:23:= lapply(.SD,recode,'YES' = 1,'NO' = 0),.SDcols = 9:23] – kemanli