2017-07-15 40 views
0

我有四個矩陣列表(intdiv1,intdiv2,intdiv3,intdiv4)。列表的第一個元素是多樣性值矩陣div(第1行:多樣性的觀測值obs和第2行:多樣性的估計值est),第二個元素是觀察和估計的標準誤差的矩陣,第三個元素是該列表是關於觀測和估計值的較低置信區間LCI,第四個是估計和觀測多樣性的較高置信區間UCI。這裏是一個列表的示例:將多個矩陣列表的內容整形爲一個數據幀

intdiv1<- 

$div 
    q1 q2 q3 q4 
obs 1 4 5 2 
est 0 2 3 6 


$sd 
    q1 q2 q3 q4 
obs 2 4 4 2 
est 0 2 1 2 

$LCI 
    q1 q2 q3 q4 
obs .1 .2 .2 .4 
est 0 2 1 2 

$UCI 
    q1 q2 q3 q4 
obs .2 .4 .4 .2 
est 0 2 1 4 

我有四個列出了要我檢查四個不同區域相同的元素。我想使四個列表的內容成爲一個數據框,將列表的結果組合成一個數據框。每個矩陣的行將在數據框中成爲它們自己的變量。輸出將顯示如下(注:因爲我用的是sample函數的輸出值將不會在示例列表匹配值:

output<- data.frame(list= 
        c("intdiv1","intdiv1","intdiv1","intdiv1", 
         "intdiv2","intdiv2","intdiv2","intdiv2", 
         "intdiv3","intdiv3","intdiv3","intdiv3", 
         "intdiv4","intdiv4","intdiv4","intdiv4"), 
       q=rep(c("1","2","3","4"),4), 
       div.obs=sample(c(1:50), 16, replace=TRUE), 
       div.est= sample(c(1:50), 16,replace=TRUE), 
       sd.obs=sample(c(0:5), 16,replace=TRUE), 
       sd.est=sample(c(0:5), 16,replace=TRUE),      
        LCI.obs=sample(c(1:50), 16,replace=TRUE), 
       LCI.est=sample(c(1:50), 16,replace=TRUE), 
       UCI.obs= sample(c(1:50), 16,replace=TRUE), 
       UCI.est=sample(c(1:50), 16,replace=TRUE)) 

我曾嘗試以下,以使一個單一的列表中的數據框:

df.intdiv1<- lapply(seq_along(intdivdf1), function (i) { 
data.frame(obs.div=intdivdf1[[1]][1,], 
     obs.se=intdivdf1[[2]][1,], 
     obs.LCI=intdivdf1[[3]][1,], 
     obs.UCI=intdivdf1[[4]][1,], 
     est.div=intdivdf1[[1]][2,], 
     est.se=intdivdf1[[2]][2,], 
     est.LCI=intdivdf1[[3]][2,], 
     est.UCI=intdivdf1[[4]][2,] 
     ) 
    })  

intdivall<- rbind(df.intdiv1, df.intdiv2, df.intdiv3, df.intdiv4) 

但是我得到的第一個函數錯誤,不認爲我的方法是最有效的

回答

0

你可以這樣做:

J <- function(x) t(rbind(x$div, x$sd, x$LCI, x$UCI)) 

output<- data.frame(
    List=rep(c("intdiv1","intdiv2","intdiv3","intdiv4"), each=4), 
    q=rep(c("1","2","3","4"),4)) 
# or: 
# output <- expand.grid(q=1:4, List=paste0("intdiv", 1:4)) 

output <- cbind(output, rbind(J(intdiv1), J(intdiv2), J(intdiv3), J(intdiv4))) 

如果您希望可以重命名數據幀的列。

相關問題