【问题标题】:R: Convert list of lists with varying number of items to dataframeR:将具有不同数量项目的列表转换为数据框
【发布时间】:2015-03-11 13:05:13
【问题描述】:

List-to-dataframe 已被广泛讨论 here,但我找不到一个非常简单的问题的解决方案:包含不同数量项目的列表。

这是列表

require(json)
hdi <- fromJSON(file="http://data.undp.org/resource/y8j2-3vi9.json")

列表的第一个列表是

hdi[1]
[[1]]
[[1]]$`_2011_hdi_value`
[1] "0.887"

[[1]]$`_1990_hdi_value`
[1] "0.798"

[[1]]$`_2000_2013_average_annual_hdi_growth`
[1] "0.37"

[[1]]$`_1980_hdi_value`
[1] "0.757"

[[1]]$`_2010_hdi_value`
[1] "0.885"

[[1]]$`_2008_hdi_value`
[1] "0.879"

[[1]]$`_1990_2000_average_annual_hdi_growth`
[1] "0.62"

[[1]]$`_2012_hdi_value`
[1] "0.889"

[[1]]$`_2013_hdi_value`
[1] "0.890"

[[1]]$`_2005_hdi_value`
[1] "0.870"

[[1]]$`_2000_hdi_value`
[1] "0.849"

[[1]]$country
[1] "Very high human development"

[[1]]$`_1980_1990_average_annual_hdi_growth`
[1] "0.52"

但列表中的项目数量不同

summary(as.numeric(summary(hdi)[,"Length"]))
#   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#   5.00   16.00   16.00   14.93   16.00   16.00 

我想构建一个包含 16 列的数据框,其中 NA 表示该列表的缺失值。

【问题讨论】:

  • 这些 NA 在结果数据框中的位置以及为什么?

标签: json r list


【解决方案1】:

最简单的是

data <- jsonlite::fromJSON("http://data.undp.org/resource/y8j2-3vi9.json")

或者,使用rlist

library(rlist)
data <- list.stack(hdi, fill=TRUE) 

【讨论】:

    【解决方案2】:

    你可以试试这个:

     require(RJSONIO)
     hdi <- fromJSON("http://data.undp.org/resource/y8j2-3vi9.json")
     #get the unique values of the column names
     columnnames<-unique(unlist(lapply(hdi,names)))
     #subset each element of the list with and rbind them together
     res<-do.call(rbind,lapply(hdi,function(x) x[columnnames]))
     colnames(res)<-columnnames
    

    从那里,您可以强制数字列并将对象强制为data.frame。我建议您使用 RJSONIO 库来处理从/到 json 的转换,因为根据我的经验,它似乎更可靠。

    【讨论】:

      猜你喜欢
      • 2017-10-31
      • 1970-01-01
      • 1970-01-01
      • 2020-07-14
      • 1970-01-01
      • 1970-01-01
      • 2021-01-18
      • 2015-04-16
      • 1970-01-01
      相关资源
      最近更新 更多