【问题标题】:Multiple list JSON to Data Frame in R [duplicate]R中的多个列表JSON到数据框[重复]
【发布时间】:2019-04-01 22:23:32
【问题描述】:

我从一个 API 获取数据,该 API 返回一个 JSON 列表,其中包含不同长度的子列表。我想将结构展平为 R 中的数据框。下面是我迄今为止使用的代码,但是,我的每个“行”或列表都包含不同数量的对象(列)。在 R 中执行此操作的最佳方法是什么?我假设它可能是对 sapply 函数的一些修改??

library(httr)
library(jsonlite)
rf <- GET("https://data.fortworthtexas.gov/resource/2ys6-nns2.json?fatality=True")
rfc <- content(rf)
rff <- fromJSON(rfc, simplifyDataFrame = TRUE)
json_file <- sapply(rfc, function(x) {
  x[sapply(x, is.null)] <- NA
  unlist(x)
})
json_file$id <- rownames(json_file)

【问题讨论】:

    标签: r json list dataframe sapply


    【解决方案1】:

    使用data.table::rbindList()fill = TRUE

    您还需要在函数中转置t() 并转换为data.frame

    library(httr)
    library(jsonlite)
    rf <- GET("https://data.fortworthtexas.gov/resource/2ys6-nns2.json?fatality=True")
    rfc <- content(rf)
    
    json_file <- sapply(rfc, function(x) {
      x[sapply(x, is.null)] <- NA
      unlist(x)
      as.data.frame(t(x))
    })
    
    library(data.table)
    data.table::rbindlist(json_file, fill= TRUE)
    
       atintersection           crashdatetime fatality hitandrun intersectingstreetblocknumber intersectingstreetname intersectingstreetsuffix location_1 reportnumber       streetname
    1:           True 2018-09-30T04:30:00.000     True     False                           700              W.DICKSON                       ST     <list>     18-87957         HEMPHILL
    2:          False 2018-10-18T19:49:00.000     True     False                             0              RIVERSIDE                       DR     <list>    180093550                 
    3:          False 2018-10-18T00:22:00.000     True     False                           100    SILVER RIDGE BLVD E                              <list>    180093211 WHITE SETTLEMENT
    4:          False 2018-10-11T02:55:00.000     True     False                          5800                                            LOOP     <list>     18-91258                 
    5:          False 2018-10-13T13:15:00.000     True     False                          1000                 LUELLA                       ST     <list>     18-91935            SOUTH
       streetsuffix intersectingstreetprefix streetprefix intersectingstreetdescription streetdescription
    1:           ST                                                                                      
    2:                                     N           NE                                                
    3:           RD                                                            CONCRETE          BLACKTOP
    4:          FWY                        E            E                                                
    5:          FWY                                                             ASPHALT           ASPHALT
    

    【讨论】:

    • 成功了,谢谢 Rich!!
    • 太棒了。而且您将不得不取消嵌套location_1 列,但我相信您可以解决这个问题!此外,在您的 #1 SO 帖子上提出清晰、可重复的问题也做得很好。 =)
    猜你喜欢
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    相关资源
    最近更新 更多