0
library(jsonlite)
paths <- list.files(
  pattern="data.json",
  full.names=TRUE,
  recursive=TRUE
)
colNames = c("BillType",
             "Congress",
             "IntroducedAt",
             "OfficialTitle",
             "Number",
             "Status",
             "SubjectsTopTerm",
             "UpdatedAt")
trimData <- function(x) {
  a <- list(x$bill_type,
            x$congress,
            x$introduced_at,
            x$official_title,
            x$number,
            x$status,
            x$subjects_top_term,
            x$updated_at)
  result <- as.data.frame(a)
  return(result)
}
rawData <- do.call(
    "rbind",
    lapply(paths, function(x) fromJSON(txt = x, simplifyDataFrame = TRUE))
)
prunedData <- do.call(
    "rbind",
    lapply(rawData, function(x) trimData(x))
)
colnames(test) <- colNames
write.csv(prunedData, "test3.csv")

このスクリプトでの私の目標は、データフレーム化された JSON データを取得し、それを CSV 出力用のよりスリムなデータ フレームに変換することです。変数はrawData最終的に約 100 列になります。RStudio でこのスクリプトを実行すると、次のエラーが発生します。

> prunedData <- do.call("rbind", lapply(rawData, function(x) trimData(x)))
Error in data.frame(NULL, NULL, NULL, NULL, NULL, c(NA, "PASS_OVER:HOUSE",  : 
  arguments imply differing number of rows: 0, 4

私は R や SQL のような宣言型言語の専門家ではないので、これを簡単に説明していただければ、大いに役立つでしょう。

4

1 に答える 1

0

ネストされたコマンドdo.call()lapply()コマンドを使用した、この JSON からデータ フレームへの移行アプローチを検討してください。外側do.callの行はファイル間でデータをバインドし、内側のdo.call行は各ファイル内の json データをバインドします。リスト データを 1 つのpaste()要素に折りたたみます。json ファイルがきれいに印刷され、すべてが 1 行に圧縮されていない場合は、EOF を削除します。

library(jsonlite)

paths <- list.files(pattern="data.json", full.names=TRUE, recursive=TRUE)
colNames = c("BillType", "Congress", "IntroducedAt", "OfficialTitle",
             "Number", "Status", "SubjectsTopTerm", "UpdatedAt")

rawData <- do.call(rbind,
                   lapply(paths, 
                          function(x)
                          do.call(rbind, 
                                  lapply(paste(readLines(x, warn=FALSE),
                                               collapse=""), 
                                         jsonlite::fromJSON)
                          )
                   )
           )

# TRIM TO NEEDED COLUMNS
prunedData <- rawdata[colNames]
于 2016-02-15T02:09:41.577 に答える