2

リストの特定のサブリストからデータ フレームを作成する必要がありました。この特定のサブリストのデータ構造が一定であることはわかっています。単一のリストの場合、 do.call() がうまくいくことがわかりました:

lst<-list(l1="aa", l2="ab", l3="ac")
fun.sublst1<-function(n) {
    a<-c("a",1,n)
    return(a)
 }
lstoflst<-lapply(lst, fun.sublst1)
do.call(rbind,lstoflst) # create a data frame from a list

ただし、リストを含むリストがあり、特定のサブリストを反復処理したい場合、do.call(rbind,lstflst$A) を使用してデータ フレームを作成することはできません。

# section list of list
fun.sublst2<-function(n) {
    a<-c("a",1,n)
    b<-c("b",2)
    return(list(A=a,B=b))
}
lstoflst<-lapply(lst, fun.sublst2)
# result should create a dataframe consisting of all sublists $A
t(cbind(lstoflst$l1$A,lstoflst$l2$A,lstoflst$l3$A))

不器用なコードでは、そのようになります。

dat<-t(as.data.frame(lstoflst[[1]][[1]]))
for(i in 2:length(lstoflst)) {
     dat<-rbind(dat,t(lstoflst[[i]][[1]]))
}

ベースRでそれを行うエレガントな方法はありますか? do.call(rbind,lstoflst, ???) 他のいくつかのパラメーターを指定するとうまくいくと思います。インデックスまたはインデックス関数を渡す必要があると思います。何か助けはありますか?

検索しましたが、検索用語がうまくいきませんでした。おそらくすでに解決済みです。とにかく私を導いてくれることを願っています。ありがとう

編集:私の例は結果として行列のみを生成するため、見出しを変更しました。

4

2 に答える 2

4

必要なリスト コンポーネントの名前 (この場合は "A") がわかっている場合は、リスト内の各リストをサブセット化できます。

lsSub <- lapply(lstoflst, "[[", "A")

そしてそれrbindから

do.call(rbind, lsSub)
#    [,1] [,2] [,3]
# l1 "a"  "1"  "aa"
# l2 "a"  "1"  "ab"
# l3 "a"  "1"  "ac"

しかし、ジョランが指摘したように、それはdata.frame

于 2012-05-31T13:08:04.110 に答える