转换为数据框:对数据框的全部阶乘子集进行模型拟合汇总

时间:2019-02-20 15:45:58

标签: r fitdistrplus

我有一个带有变量和两个因子的数据框

test <- data.frame(variable = rnorm(100,10,5),
                   factor_1 = as.factor( rep(1:2,50)),
                   factor_2 = as.factor( rep(1:5,20)))

test <- test[test$variable>0,]

我将Weibull分布拟合到 full factorial子集,并收集如下拟合参数:

DF <- split(test, list(test$factor_1, test$factor_2), drop = TRUE)

library(fitdistrplus)
fit.weibull <- function(DF) {
   scale <- summary(fitdist(DF[,1],'weibull'))[[1]][2]
   scale_sd <- summary(fitdist(DF[,1],'weibull'))[[3]][2]
   rbind(scale, scale_sd)
}
params <- lapply(DF, fit.weibull)

我基本上想要作为最终输出的是一个数据帧,该数据帧包含scalescale_sdfactor_2作为列。但是我当前的输出很难转换成这样的数据帧。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

好的,我找到了一个可行的丑陋解决方案:

scale <- c()
scale_sd <- c()
name <- c()

for (i in 1:length(params)) {

  scale[[i]] <- params[[i]][[1]]
  scale_sd[[i]] <- params[[i]][[2]]
  name[[i]] <- names(params)[i]

}

DF <- data.frame("name"= as.character(name),
                 "scale"= as.numeric(scale),
                 "scale_sd"= as.numeric(scale_sd))

name列实际上包括两个因子,因此数据帧的每一行代表一个完整的因子子集。