重新编码R中的几个类似变量
问题描述:
我正在处理中等大小的数据集,并且我有兴趣一次重新编码多个变量。重新编码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必须是命名,而不是无名” 请让我知道我在做什么错误/缺少在这里! 在此先感谢!
答
以下工作:
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。有什么我做错了吗? – kemanli
我编辑了一下,现在试试看它是如何工作的 –
我实际上找到了一种方法来修改我的原代码: my_data [,9:23:= lapply(.SD,recode,'YES' = 1,'NO' = 0),.SDcols = 9:23] – kemanli