0

フォーラムを検索しましたが、同様の質問が見つかりませんでしたので、見落としがありましたら申し訳ありません。

簡単に言えば、与えられたJSONファイルを作成したいのです。したがって、これを行う簡単な方法は、パッケージのfromJSON関数を使用してファイルを解析しjsonlite、R オブジェクトがどのように構造化されているかを確認してからJSON、最初に R オブジェクトを作成し、関数を使用してファイルを作成することだと思いましたtoJSON

JSON私が与えられたファイルは次のとおりです。

[[{"name":"Wine"},{"data":[{"rating":"23.45","month":8,"year":2012,"day":8},{"rating":"23.66","month":8,"year":2012,"day":9},{"rating":"24.75","month":8,"year":2013,"day":9},{"rating":"24.97","month":8,"year":2013,"day":12}]}]]

上記のJSONファイルをfromJSON関数で解析すると、次のオブジェクトが得られます。

str(object)

List of 1
$ :'data.frame':    2 obs. of  2 variables:
  ..$ name: chr [1:2] "Wine" NA
  ..$ data:List of 2
  .. ..$ : NULL
  .. ..$ :'data.frame': 248 obs. of  4 variables:
  .. .. ..$ rating: chr [1:248] "23.45" "23.66" "23.59" "23.48" ...
  .. .. ..$ month : int [1:248] 8 8 8 8 8 8 8 8 8 8 ...
  .. .. ..$ year  : int [1:248] 2012 2012 2012 2012 2012 2012 2012 2012 ...
  .. .. ..$ day   : int [1:248] 8 9 10 13 14 15 16 17 20 21 ...

上記のオブジェクトを作成します。値はランダムです

name = c("Wine", NA)
data = list(NULL, data.frame(rating = as.character(c(1:248)), month = as.integer(rep(12, 248)), year = as.integer(rep(1940, 248)), day = as.integer(rep(31, 248)), stringsAsFactors = FALSE))
result = data.frame(name, data)

最後の行で次のエラーが表示されます。

Error in data.frame(NULL, list(rating = c("1", "2", "3", "4", "5", "6",  :   arguments imply differing number of rows: 0, 248

誰にもアイデアがありますか?

4

1 に答える 1

0

どうやら、data.frame()関数は受け取ったリストの2番目の要素などに再帰します。

元の例のようなデータ フレームを構築するための可能なアプローチは、列を置き換えることです。

result <- data.frame(name=name,data=NA)
result$data <- data

次に、必要に応じて次のものを用意します。

str(result)

'data.frame':   2 obs. of  2 variables:
 $ name: Factor w/ 1 level "Wine": 1 NA
 $ data:List of 2
  ..$ : NULL
  ..$ :'data.frame':    248 obs. of  4 variables:
  .. ..$ rating: chr  "1" "2" "3" "4" ...
  .. ..$ month : int  12 12 12 12 12 12 12 12 12 12 ...
  .. ..$ year  : int  1940 1940 1940 1940 1940 1940 1940 1940 1940 1940 ...
  .. ..$ day   : int  31 31 31 31 31 31 31 31 31 31 ...
于 2015-02-16T18:12:01.677 に答える