0

我正在处理来自多个时间段的数据子集,我想对我的训练集进行列和级别缩减,然后将相同的操作应用于相同结构的其他数据集。

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)]
4

1 回答 1

0

如果您的目标是具有相同级别的相同变量,那么您需要避免使用dataframeReduce第二次,而是使用与 hte train-set 上的操作产生的相同列dataframeReduce并将因子缩减逻辑应用于测试集以导致后续比较操作所需的任何程度的同源性的方式。如果这predict是计划中的操作,那么您需要使级别相同,并且您需要修改dataframeReduce适用于级别的代码:

    if (is.category(x) || length(unique(x)) == 2) {
        tab <- table(x)
        if ((min(tab)/n) < minprev) {
            if (is.category(x)) {
              x <- combine.levels(x, minlev = minprev)
              s <- "grouped categories"
              if (length(levels(x)) < 2) 
                s <- paste("prevalence<", minprev, sep = "")
            }
            else s <- paste("prevalence<", minprev, sep = "")
        }
    }

因此,更好的问题陈述可能会产生更好的策略。这可能需要知道整个集合以及训练和测试集中的级别以及预期的测试或预测(但尚未说明)。

于 2013-06-03T15:20:18.687 回答