2017-08-14 177 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執行我的所有操作。我們假設我只是過濾了一些觀察結果。問題是,我需要返回相同的嵌套表結構所要求的網絡應用程序,我想送這個數據,但現在當然的數據是這樣的:

> 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中的元素不能更改(不添加或刪除行)。第二個潛在問題是'unlist'會將所有元素強制爲相同類型。 – lmo

+0

@lmo是的,這是對的,我加了關於同一類的假設 – akrun

+0

謝謝!我不知道'relist()'!正如lmo指出的那樣,問題是我現在無法添加或刪除案例。這裏有工作嗎? –