【发布时间】:2018-12-25 00:25:22
【问题描述】:
我想估算几列的缺失值。这个想法是对于我想使用 median 来估算 NA 的数值变量和我想使用 mode 来估算 NA 的分类变量。我确实搜索了如何为不同的列集单独估算它,但没有找到。
我的数据很大,有很多列,所以我把它放在 data.table 中。由于我不确定如何在 data.table 中执行此操作,因此我尝试了下面的代码库 R。我尝试了下面的代码,但不知怎的,我似乎搞乱了列名标识。
我的数据很大并且包含多个变量。我将数值变量存储在向量 var_num 中,并将分类变量存储在向量 var_chr 中。
请看下面我的示例代码 -
library(data.table)
set.seed(1200)
id <- 1:100
bills <- sample(c(1:20,NA),100,replace = T)
nos <- sample(c(1:80,NA),100,replace = T)
stru <- sample(c("A","B","C","D",NA),100,replace = T)
type <- sample(c(1:7,NA),100,replace = T)
value <- sample(c(100:1000,NA),100,replace = T)
df1 <- as.data.table(data.frame(id,bills,nos,stru,type,value))
class(df1)
var_num <- c("bills","nos","value")
var_chr <- c("stru","type")
impute <- function(x){
#print(x)
if(colnames(x) %in% var_num){
x[is.na(x)] = median(x,na.rm = T)
} else if (colnames(x) %in% var_chr){
x[is.na(x)] = mode(x)
} else {
x #if not part of var_num and var_chr then nothing needs to be done and return the original value
}
return(x)
}
df1_imp_med <- data.frame(apply(df1,2,impute))
当我尝试运行上面的代码时,它给了我错误Error in if (colnames(x) %in% var_num) { : argument is of length zero
请帮助我了解如何纠正此问题并实现我的要求。
【问题讨论】:
-
如果您使用的是
data.table,您应该考虑利用它的功能,例如使用:=assingment 进行引用更新,或者在这种情况下可能更适合for+ @987654328 @ 遍历多个列。
标签: r function data.table missing-data imputation