2017-07-15 5 views
0

4つの行列のリスト(intdiv1,、intdiv3intdiv4)があります。このリストの第1要素は、ダイバーシティ値divの行列(行1:ダイバーシティobsの観測値と行2:ダイバーシティ推定値est)であり、第2要素は、観測され推定された標準誤差seの行列であり、第3要素はリストは、観測値と推定値の下限信頼区間であるLCIであり、第4は、推定され観測された多様性の場合の上の信頼区間であるUCIです。 1つのリストの例を次に示します。行列の複数のリストの内容を1つのデータフレームに変更する

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 

私は調べている4つの異なる地域で同じ要素を持つ4つのリストを持っています。 4つのリストの内容を、リストの結果をデータフレームに組み合わせた1つのデータフレームにしたいと思います。各行列の行は、データフレーム内で独自の変数になります。私は、出力のための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))) 

データフレームの列の名前を変更することができます。

関連する問題