2016-03-19 4 views
1

私はjsonliteでWeb APIからデータを解析しようとしますが、何らかの理由でそれが返すオブジェクトはリストです。なぜjsonliteはデータをリストオブジェクトに解析しますか?

jsonliteパッケージのドキュメントでは、簡略化プロセスによってJSONリストが自動的により特定のRクラスに変換されますが、私の場合は動作しません。

simplifyVectorsimplifyDataFrame、およびsimplifyMatrixの機能は無効になっていますが、それぞれデフォルトで有効になっています。

$Nameデータ(EAC、EFL、ELCなど)を取得するデータフレームが必要です。

また、rjsonライブラリで試してみますが、同じ問題があります。

何が間違っている可能性がありますか?

私が使用するコード見つけてください、ありがとう: - すでにコメント欄で述べて -

raw <- getURL("https://www.cryptocompare.com/api/data/coinlist") 
library(jsonlite) 
data <- fromJSON(txt=raw) 

> class(data) 
[1] "list" 

> typeof(data) 
[1] "list" 

> str(data) 
[...] 
    ..$ EAC :List of 13 
    .. ..$ Id     : chr "4437" 
    .. ..$ Url    : chr "/coins/eac/overview" 
    .. ..$ ImageUrl   : chr "/media/19690/eac.png" 
    .. ..$ Name    : chr "EAC" 
    .. ..$ CoinName   : chr "EarthCoin" 
    .. ..$ FullName   : chr "EarthCoin (EAC)" 
    .. ..$ Algorithm   : chr "Scrypt" 
    .. ..$ ProofType   : chr "PoW" 
    .. ..$ FullyPremined  : chr "0" 
    .. ..$ TotalCoinSupply : chr "13500000000" 
    .. ..$ PreMinedValue  : chr "N/A" 
    .. ..$ TotalCoinsFreeFloat: chr "N/A" 
    .. ..$ SortOrder   : chr "100" 
    ..$ EFL :List of 13 
    .. ..$ Id     : chr "4438" 
    .. ..$ Url    : chr "/coins/efl/overview" 
    .. ..$ ImageUrl   : chr "/media/19692/efl.png" 
    .. ..$ Name    : chr "EFL" 
    .. ..$ CoinName   : chr "E-Gulden" 
    .. ..$ FullName   : chr "E-Gulden (EFL)" 
    .. ..$ Algorithm   : chr "Scrypt" 
    .. ..$ ProofType   : chr "PoW" 
    .. ..$ FullyPremined  : chr "0" 
    .. ..$ TotalCoinSupply : chr "21000000 " 
    .. ..$ PreMinedValue  : chr "N/A" 
    .. ..$ TotalCoinsFreeFloat: chr "N/A" 
    .. ..$ SortOrder   : chr "101" 
    ..$ ELC :List of 13 
    .. ..$ Id     : chr "4439" 
    .. ..$ Url    : chr "/coins/elc/overview" 
    .. ..$ ImageUrl   : chr "/media/19694/elc.png" 
    .. ..$ Name    : chr "ELC" 
    .. ..$ CoinName   : chr "Elacoin" 
    .. ..$ FullName   : chr "Elacoin (ELC)" 
    .. ..$ Algorithm   : chr "Scrypt" 
    .. ..$ ProofType   : chr "PoW" 
    .. ..$ FullyPremined  : chr "0" 
    .. ..$ TotalCoinSupply : chr "75000000" 
    .. ..$ PreMinedValue  : chr "N/A" 
    .. ..$ TotalCoinsFreeFloat: chr "N/A" 
    .. ..$ SortOrder   : chr "102" 
    .. [list output truncated] 
$ Type  : int 100 
NULL 
+0

私は 'fromJSONは()'このリストは最も単純な形式で既にあることを決定しましたことを想像してみてください。そこにネストされたリストがあります。おそらく残りの作業は自分で行う必要があります。 '> STR(DF) 'data.frame':\t 6411 OBS –

答えて

2

として、私は自分の質問にはお答えすることが最も簡単な形式だで返されたオブジェクトが既にあります。おそらくjsonliteは、複数のリスト(リスト作成)からデータフレームを作成することはできません。

私が見つけた解決策は、このようunlistdata.frameを使用することです:

> df <- data.frame(unlist(data)) 
> class(df) 
[1] "data.frame" 
+0

は、私は非常に有用な結果ではないと思います。 1変数: $ unlist.data .:ファクタ3674レベル "27625814"、 "ClubCoin"、..:3436 2443 2833 2833 1005 57 518 2350 2266 2267 ... ' –

2

あなたは構造体の下端を示したが、データフレームが返されなかった理由についての質問への答えがで見られます構造体の頂:

# note: needed `require(RCurl)` to obtain getURL 
> str(data) 
List of 6 
$ Response : chr "Success" 
$ Message  : chr "Coin list succesfully returned!" 
$ BaseImageUrl: chr "https://www.cryptocompare.com" 
$ BaseLinkUrl : chr "https://www.cryptocompare.com" 
$ Data  :List of 492 
    ..$ BTC :List of 13 
    .. ..$ Id     : chr "1182" 
    .. ..$ Url    : chr "/coins/btc/overview" 
    .. ..$ ImageUrl   : chr "/media/19633/btc.png" 
    .. ..$ Name    : chr "BTC" 
    .. ..$ CoinName   : chr "Bitcoin" 
    .. ..$ FullName   : chr "Bitcoin (BTC)" 
    .. ..$ Algorithm   : chr "SHA256" 
# ------snipped the many, many pages of output that followed--------- 

はさらに、そのリストの$データノードはとても難しいかもしれない一の段階でデータフレームに強制変換不規則な長さを有していますPKGをロードした後

> table(sapply(data$Data, length)) 

12 13 14 
    2 478 12 

:私はfurhter分析のための有用な出発点をcontructすることができるよと類似するが同一ではないデータフレームをrbindする便利な機能を提供していplyr:

require(plyr) 
money <- do.call(rbind.fill, lapply(data$Data, data.frame, stringsAsFactors=FALSE)) 
str(money) 
#------------  
'data.frame': 492 obs. of 14 variables: 

$ Id     : chr "1182" "3808" "3807" "5038" ... 
$ Url    : chr "/coins/btc/overview" "/coins/ltc/overview" "/coins/dash/overview" "/coins/xmr/overview" ... 
$ ImageUrl   : chr "/media/19633/btc.png" "/media/19782/ltc.png" "/media/20626/dash.png" "/media/19969/xmr.png" ... 
$ Name    : chr "BTC" "LTC" "DASH" "XMR" ... 
$ CoinName   : chr "Bitcoin" "Litecoin" "DigitalCash" "Monero" ... 
$ FullName   : chr "Bitcoin (BTC)" "Litecoin (LTC)" "DigitalCash (DASH)" "Monero (XMR)" ... 
$ Algorithm   : chr "SHA256" "Scrypt" "X11" "CryptoNight" ... 
$ ProofType   : chr "PoW" "PoW" "PoW/PoS" "PoW" ... 
$ FullyPremined  : chr "0" "0" "0" "0" ... 
$ TotalCoinSupply : chr "21000000" "84000000" "22000000" "0" ... 
$ PreMinedValue  : chr "N/A" "N/A" "N/A" "N/A" ... 
$ TotalCoinsFreeFloat: chr "N/A" "N/A" "N/A" "N/A" ... 
$ SortOrder   : chr "1" "3" "4" "5" ... 
$ TotalCoinsMined : chr NA NA NA NA ... 

次のことができるようにしたい場合これらの暗号通貨の略称を経由して行にアクセス、あなたができる:

今、あなたがこれを行うことができます
rownames(money) <- names(data$Data) 

> money[ "BTC", ] 
     Id     Url    ImageUrl Name CoinName 
BTC 1182 /coins/btc/overview /media/19633/btc.png BTC Bitcoin 
     FullName Algorithm ProofType FullyPremined TotalCoinSupply 
BTC Bitcoin (BTC) SHA256  PoW    0  21000000 
    PreMinedValue TotalCoinsFreeFloat SortOrder TotalCoinsMined 
BTC   N/A     N/A   1   <NA> 
アクセスする前に

もう少し不格好だっただろう:

> money[ money$Name=="BTC", ] 
+0

ありがとうございました。私はコンソールの出力の開始を捕捉することができませんでした。 – Florent

関連する問題