嵌套数据框架

时间:2013-09-04 00:40:35

标签: r mcmc

我有一个技术问题,看起来,我自己无法解决。我使用 mcmcglmm 包进行了估算。通过结果$ Sol我可以访问估计的后验分布。应用 class()告诉我该对象属于" mcmc"。使用 as.data.frame()会产生嵌套数据帧,其中包含其他数据帧(一个数据帧包含许多其他数据帧)。我想 rbind()主数据框内的所有数据帧,以便生成一个数据帧(或者更确切地说是一个向量),其中包含所有后验分布的所有值和(次要)的名称数据框作为rowname。,任何想法?每一个提示我都会感激不尽!

更新:我没有设法为stackoverflow生成有用的数据集,所有这些采样链的这些数据集总是太大。如果您想帮助我,请考虑运行以下(示范)模型

require(MCMCglmm)
data(PlodiaPO)
result <- MCMCglmm(PO ~ plate + FSfamily, data = PlodiaPO, nitt = 50, thin = 2, burn = 10, verbose = FALSE)

result $ Sol(一个mcmc对象)是存储所有链的地方。我想rbind所有链,以便拥有一个包含所有后验分布的所有值的变量,并将变量名称作为rownames(或者因为不允许重复的rownames作为附加的字符向量)。

1 个答案:

答案 0 :(得分:3)

我不能(使用来自MCMCglmm的示例代码)构建一个示例,其中as.data.frame(model $ Sol)为我提供了数据帧的数据框。因此,虽然可能有一个简单的答案,但我不能轻易地检查它。

那就是说,这是一个可能有帮助的例子。请注意,如果您的子数据帧没有相同的名称,那么这将无效。

# create a nested data.frame example to work on
a.df <- data.frame(c1=runif(10),c2=runif(10))
b.df <- data.frame(c1=runif(10),c2=runif(10))
full.df <- data.frame(1:10)
full.df$a <- a.df
full.df$b <- b.df
full.df <- full.df[,c("a","b")]

# the solution
res <- do.call(rbind,full.df)

修改

好的,使用你的新例子,

require(MCMCglmm) 
data(PlodiaPO) 
result<- MCMCglmm(PO ~ plate + FSfamily, data=PlodiaPO,nitt=50,thin=2,burn=10,verbose=FALSE)
melt(do.call(rbind,(as.data.frame(result$Sol))))