2017-12-31 295 views
1

R、jsonデータ、およびAPIの最初の質問と3日間の経験を持つこのフォーラムには、なんてこともありません。しかし、これを学ぶことに本当に興奮しています!!jsonファイルをデータフレームに変換しようとすると、「エラー:引数が異なる行数:1,0」を返す

jsonデータを次のAPIエンドポイントから使用可能なデータフレームに変換しようとしています。ここにjsonへのリンクがあります:https://api.binance.com/api/v1/depth?symbol=ETHBTC私はこれを行うには、次のコードを使用しています(簡体字):

デバッグを
Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, : 
    arguments imply differing number of rows: 1, 0** 

、誤差は、最後の行に最初の理由は最も可能性が高いです。

library(jsonlite) 
library(httr) 

endpoint <- "https://api.binance.com/api/v1/depth?symbol=ETHBTC" 
dt_text <- content(GET(endpoint), "text") 
dt_json <- fromJSON(dt_text, flatten = TRUE) 
df_GetDepth <- as.data.frame(dt_json) 

はしかし、私はこのエラーを取得していますjsonデータの列には1つのエントリしかなく、他の列にはより多くのエントリがあるように見えます。

{ 
    "lastUpdateId": 1027024, 
    "bids": [ 
    [ 
     "4.00000000",  // PRICE 
     "431.00000000", // QTY 
     []    // Can be ignored 
    ] 
    ], 
    "asks": [ 
    [ 
     "4.00000200", 
     "12.00000000", 
     [] 
    ] 
    ] 
} 

実際に専門家から学ぶことを楽しみにしています。データのサブセットを使用

はアディティア

答えて

0

"lastUpdateId"を省略し、そしてのみ"asks""bids"のそれぞれの最初の3つは)、のいずれかを使用:、rbind-INGのを

dt2 <- lapply(dt_json, head, 3)[c("bids","asks")] 
dt2 <- structure(list(bids = list(list("0.05309400", "8.00000000", character(0)), 
    list("0.05308800", "25.79300000", character(0)), list("0.05308600", 
     "8.25500000", character(0))), asks = list(list("0.05317900", 
    "0.15500000", character(0)), list("0.05319400", "0.04100000", 
    character(0)), list("0.05319600", "1.50000000", character(0)))), .Names = c("bids", 
"asks")) 

str(dt2) 
# List of 2 
# $ bids:List of 3 
# ..$ :List of 3 
# .. ..$ : chr "0.05309400" 
# .. ..$ : chr "8.00000000" 
# .. ..$ : chr(0) 
# ..$ :List of 3 
# .. ..$ : chr "0.05308800" 
# .. ..$ : chr "25.79300000" 
# .. ..$ : chr(0) 
# ..$ :List of 3 
# .. ..$ : chr "0.05308600" 
# .. ..$ : chr "8.25500000" 
# .. ..$ : chr(0) 
# $ asks:List of 3 
# ..$ :List of 3 
# .. ..$ : chr "0.05317900" 
# .. ..$ : chr "0.15500000" 
# .. ..$ : chr(0) 
# ..$ :List of 3 
# .. ..$ : chr "0.05319400" 
# .. ..$ : chr "0.04100000" 
# .. ..$ : chr(0) 
# ..$ :List of 3 
# .. ..$ : chr "0.05319600" 
# .. ..$ : chr "1.50000000" 
# .. ..$ : chr(0) 

最初のステップ物事:その後、

dt3 <- lapply(dt2, function(a) do.call(rbind, lapply(a, function(b) rbind(Filter(length, b))))) 
dt3 
# $bids 
#  [,1]   [,2]   
# [1,] "0.05309400" "8.00000000" 
# [2,] "0.05308800" "25.79300000" 
# [3,] "0.05308600" "8.25500000" 
# $asks 
#  [,1]   [,2]   
# [1,] "0.05317900" "0.15500000" 
# [2,] "0.05319400" "0.04100000" 
# [3,] "0.05319600" "1.50000000" 

と数字への変換:

dt4 <- lapply(dt3, function(a) t(apply(a, 1, as.numeric))) 
dt4 
# $bids 
#   [,1] [,2] 
# [1,] 0.053094 8.000 
# [2,] 0.053088 25.793 
# [3,] 0.053086 8.255 
# $asks 
#   [,1] [,2] 
# [1,] 0.053179 0.155 
# [2,] 0.053194 0.041 
# [3,] 0.053196 1.500 

これは行列を生成します。行列は、必要に応じて変換してdata.framesに変換し、列名を適用するのに十分なはずです。

関連する問題