ネストされたリスト構造をデータフレームに変換しようとしています。リストは次のようになります (これは、httr パッケージを使用して読み込まれた、解析された JSON からシリアル化されたデータです)。
myList <- list(object1 = list(w=1, x=list(y=0.1, z="cat")), object2 = list(w=NULL, x=list(z="dog")))
編集: 元のサンプル データは単純すぎました。実際のデータは不規則です。つまり、すべてのオブジェクトにすべての変数が存在するわけではなく、リスト要素の一部が NULL です。これを反映するようにデータを編集しました。
unlist(myList)
リストを再帰的に平坦化する素晴らしい仕事をします。その後lapply
、すべてのオブジェクトをうまく平坦化するために使用できます。
flatList <- lapply(myList, FUN= function(object) {return(as.data.frame(rbind(unlist(object))))})
そして最後に、plyr::rbind.fill
myDF <- do.call(plyr::rbind.fill, flatList)
str(myDF)
#'data.frame': 2 obs. of 3 variables:
#$ w : Factor w/ 2 levels "1","2": 1 2
#$ x.y: Factor w/ 2 levels "0.1","0.2": 1 2
#$ x.z: Factor w/ 2 levels "cat","dog": 1 2
問題は、w と xy が文字ベクトルとして解釈されるようになり、デフォルトでデータフレームの要素として解析されることです。それunlist()
が原因だと思いますが、リスト構造を再帰的にフラット化する別の方法がわかりません。回避策は、データフレームを後処理してからデータ型を割り当てることです。ベクトルが有効な数値ベクトルまたは整数ベクトルかどうかを判断する最良の方法は何ですか?