我正在处理来自多个时间段的数据子集,我想对我的训练集进行列和级别缩减,然后将相同的操作应用于相同结构的其他数据集。
Hmisc 包中的 dataframeReduce 是我一直在使用的,但是将函数应用于不同的数据集会导致操作略有不同。
trainPredictors<-dataframeReduce(trainPredictors,
fracmiss=0.2, maxlevels=20, minprev=0.075)
testPredictors<-dataframeReduce(testPredictors,
fracmiss=0.2, maxlevels=20, minprev=0.075)
testPredictors<-testPredictors[,names(trainPredictors)]
最后一行最终出错,因为 backPredictors 删除了 trainPredictors 确实保留的列。所有其他集合都应将转换应用于应用于它们的 trainPredictors。
有谁知道如何使用 dataframeReduce 或其他函数/代码块将相同的清理操作应用于多个数据集?
一个例子
使用来自http://trinkerrstuff.wordpress.com/2012/05/02/function-to-generate-a-random-data-set/的函数 NAins
NAins <- NAinsert <- function(df, prop = .1){
n <- nrow(df)
m <- ncol(df)
num.to.na <- ceiling(prop*n*m)
id <- sample(0:(m*n-1), num.to.na, replace = FALSE)
rows <- id %/% m + 1
cols <- id %% m + 1
sapply(seq(num.to.na), function(x){
df[rows[x], cols[x]] <<- NA
}
)
return(df)
}
library("Hmisc")
trainPredictors<-NAins(mtcars, .1)
testPredictors<-NAins(mtcars, .3)
trainPredictors<-dataframeReduce(trainPredictors,
fracmiss=0.2, maxlevels=20, minprev=0.075)
testPredictors<-dataframeReduce(testPredictors,
fracmiss=0.2, maxlevels=20, minprev=0.075)
testPredictors<-testPredictors[,names(trainPredictors)]