0

私はFCC のドキュメントに従って、手続きに関するメタデータをダウンロードしています。

データを投稿できるとは思えませんが、無料のAPI キーを取得できます。

私のコードは、JSON 形式の構造化された df ではなく、2 つのリストのリスト リストになります。

私の目標は、各json要素が独自の列であるデータフレームを持つことです..通常のdfのように。

library(httr)
library(jsonlite)

datahere = "C:/fcc/"
setwd(datahere)

URL <- "https://publicapi.fcc.gov/ecfs/filings?api_key=<KEY HERE>&proceedings.name=14-28&sort=date_disseminated,DESC"
dataDF <- GET(URL)
dataJSON <- content(dataDF, as="text")
dataJSON <- fromJSON(dataJSON)

# NAs
dataJSON2 <- lapply(dataJSON, function(x) {
  x[sapply(x, is.null)] <- NA
  unlist(x)
})

x <- do.call("rbind", dataJSON2)
x <- as.data.frame(x)
4

1 に答える 1

2

JSON は非常に深くネストされているため、list と data.frame の間の変換についてもう少し考える必要があります。以下のロジックは、25 個のファイリング (102 個の変数) と 10 個の集計 (25 個の変数) の data.frame を引き出します。

# tackle the filings object
filings_df <- ldply(dataJSON$filings, function(x) {
  # removes null list elements
  x[sapply(x, is.null)] <- NA
  # converts to a named character vector
  unlisted_x <- unlist(x)
  # converts the named character vector to data.frame
  # with 1 column and rows for each element
  d <- as.data.frame(unlisted_x)
  # we need to transpose this data.frame because 
  # the rows should be columns, and don't check names when converting
  d <- as.data.frame(t(d), check.names=F)
  # now assign the actual names based on that original 
  # unlisted character vector
  colnames(d) <- names(unlisted_x)
  # now return to ldply function, which will automatically stack them together
  return(d)
})

# tackle the aggregations object
# same exact logic to create the data.frame
aggregations_df <- ldply(dataJSON$aggregations, function(x) {
  # removes null list elements
  x[sapply(x, is.null)] <- NA
  # converts to a named character vector
  unlisted_x <- unlist(x)
  # converts the named character vector to data.frame
  # with 1 column and rows for each element
  d <- as.data.frame(unlisted_x)
  # we need to transpose this data.frame because 
  # the rows should be columns, and don't check names when converting
  d <- as.data.frame(t(d), check.names=F)
  # now assign the actual names based on that original 
  # unlisted character vector
  colnames(d) <- names(unlisted_x)
  # now return to ldply function, which will automatically stack them together
  return(d)
})
于 2016-07-21T22:32:19.250 に答える