2017-10-17 200 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