2017-08-14 19 views
2

基本的に矩形のデータを含むネストされたリストを考えてみましょう。データフレームへのネストされたリストとネストされたリストへ戻る

mylst1 <- list(
    "system" = list(
    "subjectId" = c(101,102,103), 
    "procedureId" = c(202,202,203) 
), 
    "demographics" = list(
    "demo_age" = c(12,22,32), 
    "demo_gender" = c(1,0,1) 
), 
    "items" = list(
    "N" = list(
     "n001" = c(1,2,3), 
     "n002" = c(3,2,1) 
    ), 
    "E" = list(
     "e001" = c(1,2,3), 
     "e002" = c(3,2,1) 
    ) 
) 
) 

ネストされたリストは、で動作するように厄介なので、のは、データフレームを作成してみましょう: myDf <- data.frame(mylst1)

これまでのところは良い、今私はmyDfにすべての私の操作を実行できます。私がちょうどいくつかの観測をフィルタリングしたと仮定しましょう。問題は、私はこのデータを送信するWebアプリケーションで必要とされるのと同じネストされたリスト構造を返す必要があるということですが、今のコースのデータは次のようになります。最高の解決策になる何

> str(myDf)  
'data.frame': 3 obs. of 8 variables: 
    $ system.subjectId  : num 101 102 103 
    $ system.procedureId  : num 202 202 203 
    $ demographics.demo_age : num 12 22 32 
    $ demographics.demo_gender: num 1 0 1 
    $ items.N.n001   : num 1 2 3 
    $ items.N.n002   : num 3 2 1 
    $ items.E.e001   : num 1 2 3 
    $ items.E.e002   : num 3 2 1 

このデータを元のリスト形式で取得するには?私は各レベルの区切り文字として.を使用することを考えていましたが、実際にこれを行う方法がわかりません。

おかげ

答えて

3

一つの選択肢relist(カラムが同じclassの全てであると仮定する)だろう「myDf」のように

newlst <- relist(unlist(myDf), skeleton = mylst1) 
identical(mylst1, newlst) 
#[1] TRUE 
+2

一つの大きな注意点は、(私は信じている)であることの数MyDFの要素は変更できません(行の追加または削除はありません)。 2番目の潜在的な問題は、 'unlist'がすべての要素を同じ型に強制することです。 – lmo

+0

@lmoうん、それは正しいです、私は同じクラスについての仮定を追加しました – akrun

+0

ありがとう!私は 'relist()'について知らなかった! lmoが指摘しているように、問題は私が今ケースを追加したり削除したりすることができないということです。ここには作品がありますか? –

関連する問題