将函数应用于所有列,但仅限于R中类的每个级别中的行

时间:2017-08-10 10:48:25

标签: r function dataframe

我有一个带有许多数字列的df,以及一个带有三个等级(A,B和C)的因子变量(catvar)。我有一个执行一些深奥计算的函数,并返回一个新的数据框,其中包含一个标题为" estimatefinal"的新列。这样可以正常工作,但我希望这可以单独应用于" catvar"的每个级别。我怎样才能做到这一点?

这是我的功能,虽然它的具体内容并不一定相关:

bestpercentile <- function(x){
n = 10
auc_final <- array(0, dim = c(n, n, n))
for (i in 1:n){
for (j in 1:n){
  for (k in 1:n){
    findbest <- function(x){
      x <- spare
      x$income_per <-apply(x[,6:9], 1, quantile, probs = i/n, na.rm = T)
      x$purchases_per <-apply(x[,10:13], 1, quantile, probs = j/n, na.rm = T)
      x$expenses_per <-apply(x[,14:18], 1, quantile, probs = k/n, na.rm = T)
      x$estimate <<- x$income_per-x$purchases_per-x$expenses_per
    }
    findbest(x)
    model <- glm(default ~ estimate, data = x, family = "binomial")
    auc_coef <- performance(prediction(predict(model , x, type="response"), x$default), measure = "auc")
    auc_final[i,j,k] <- auc_coef@y.values[[1]]
  }
 }
}
  optimumpercentile <- which(auc_final == max(auc_final), arr.ind = TRUE)
x$income_per <-apply(x[,6:9], 1, quantile, probs = optimumpercentile[1]/10, na.rm = T)
x$purchases_per <-apply(x[,10:13], 1, quantile, probs = optimumpercentile[2]/10, na.rm = T)
x$expenses_per <-apply(x[,14:18], 1, quantile, probs = optimumpercentile[3]/10, na.rm = T)
x$estimatefinal <- x$income_per-x$purchases_per-x$expenses_per
return(x)
}

如果我将df分成三个等级的每个等级,那么最终的结果将是我得到的结果#cat;&#34; catvar&#34;然后为每个新的df运行该函数三次,然后最终将这三个函数组合在一起。当然,我认为这样做的方式很糟糕,但我宁愿有一个更优雅的解决方案。

由于

0 个答案:

没有答案