使用循环填充data.frame,级别集不同

时间:2014-11-25 14:16:31

标签: r

我是R的新人,这个问题可能非常基本。 我正在使用R来为某些数据拟合伽马分布,这些数据位于"模型集"数据集。

我想创建一个新的数据框,我可以使用循环列出某些观测值的伽玛分布系数。

这就是我所做的:

我创建了一个载体,其中包含我需要系数的观察结果。

Format<- c('10x2', '10x3','10x7', '17x15', '17x7', '20x2', '20x3','25x4','4 column','5 column','7x7','DPS','FP')    

然后我创建了另一个需要填充循环的对象(Shape =伽玛分布的形状)。

Shape<- 1:13    

然后我用两个对象

创建了data.frame
GammaShape<- data.frame(Format, Shape)    

最后我想用一个循环来填充列#34; Shape&#34;与价值观。

for (i in GammaShape$Shape) { GammaShape$Shape[i] = coef(fitdistr(modelset$ETTime[which(modelset$Format == GammaShape$Format[i])]/1000))}    

但是我收到了这个错误:

Error in Ops.factor(modelset$Format, GammaShape$Format[i]) : level sets of factors are different    

尽管水平是相同的。

1 个答案:

答案 0 :(得分:0)

好吧,我的推荐是双重的。首先,在创建data.frame时不要使用因素;如果你真的需要它们,你可以考虑事后。所以:

GammaShape <- data.frame(Format, Shape, stringsAsFactors = FALSE)

第二:for循环是修改data.frames的一种非常低效的方法,因为data.frames的存储和修改方式:每次调整一个值时,你实际上都在重新创建data.frame( new)格式并将其分配给旧名称,这对于大对象来说计算成本很高。虽然这是一个非常小的数据框架,但我建议养成尽可能操作单个向量的习惯,并在完成迭代后合并到data.frame 中。 。所以:

Format <- c('10x2', '10x3', '10x7', '17x15', '17x7', '20x2', '20x3',
            '25x4', '4 column', '5 column', '7x7', 'DPS', 'FP')

Shape <- numeric(length(Format))

for(i in seq_along(Shape)){
     Shape[i] <- coef(fitdistr(modelset$ETTime[which(modelset$Format == Format[i])]/1000))
}

GammaShape <- data.frame(Format, Shape, stringsAsFactors = FALSE)

...然后,如果你想考虑因素,那么,应用as.factor。请注意,此解决方案根据我的知识工作 - 您的示例并未向我们展示模型集。