我有一个带有许多数字列的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运行该函数三次,然后最终将这三个函数组合在一起。当然,我认为这样做的方式很糟糕,但我宁愿有一个更优雅的解决方案。
由于