2017-06-20 14 views
0

JSONデータのサブセット化に問題があります。サブセット化の基礎を理解している私はかなり新しいです。JSONのサブセット固有の日付をR

library(jsonlite) 
    library(curl) 

    url1="https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol=RCS&outputsize=full&apikey=DEMO" 

    StockData2<- fromJSON(url1,flatten = TRUE) 

データは次のようになります(4394日のうち2日間の価値があります)。私が抱えている問題は、それぞれの日付がユニークであることと、日付とそのサブセットされた価格のうちのどれかを引き出す方法を理解することができないことです。

> str(StockData) 
List of 2 
$ Meta Data   :List of 5 
    ..$ 1. Information : chr "Daily Time Series with Splits and Dividend Events" 
    ..$ 2. Symbol  : chr "RCS" 
    ..$ 3. Last Refreshed: chr "2017-06-20 10:27:00" 
    ..$ 4. Output Size : chr "Full size" 
    ..$ 5. Time Zone  : chr "US/Eastern" 
$ Time Series (Daily):List of 4394 
    ..$ 2017-06-20 10:27:00:List of 8 
    .. ..$ 1. open    : chr "10.1100" 
    .. ..$ 2. high    : chr "10.1600" 
    .. ..$ 3. low    : chr "10.0400" 
    .. ..$ 4. close   : chr "10.1100" 
    .. ..$ 5. adjusted close : chr "10.1100" 
    .. ..$ 6. volume   : chr "17776" 
    .. ..$ 7. dividend amount : chr "0.00" 
    .. ..$ 8. split coefficient: chr "1.0000" 
    ..$ 2017-06-19   :List of 8 
    .. ..$ 1. open    : chr "9.9200" 
    .. ..$ 2. high    : chr "10.1200" 
    .. ..$ 3. low    : chr "9.9200" 
    .. ..$ 4. close   : chr "10.0800" 
    .. ..$ 5. adjusted close : chr "10.0800" 
    .. ..$ 6. volume   : chr "160599" 
    .. ..$ 7. dividend amount : chr "0.00" 
    .. ..$ 8. split coefficient: chr "1.0000" 

Daily<-StockData$`Time Series (Daily)` 

4394個の要素の大きなリストを生成します。 このリストから「日付」と「調整済み」を取得するにはどうすればよいですか?

+0

注:掲載されているようにするには、有効なAPIキーが必要です( – Spacedman

+0

)。これは動作します。 line.library(jsonlite) ライブラリ(カール) URL1 = "https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol=MSFT&apikey=demo" StockData2 < - fromJSON – DC55

答えて

1

今私は完全な解決策があるデータを得ることができます。 as.data.frameを使用していた私の以前の答えは、as.data.frameが渡された式から列名を取得しようとしたために、実際のデータで失敗しました(しかし、私のテストで働いていました)。データ名と型トリガされたas.data.frameは、列名の数を正しく設定しようとしなくなりました。代わりにdata.frameを使用するか、as.data.frameに引数optional=FALSEを追加するとこれが修正されます。

だから、解決策がある:

与える
result = setNames(
    data.frame(
    sapply(
     StockData2[["Time Series (Daily)"]], 
     function(x){ 
      x[["5. adjusted close"]] 
      })), 
    c("adjusted close")) 

> head(result) 
      adjusted close 
2017-06-21  70.2700 
2017-06-20  69.9100 
2017-06-19  70.8700 
2017-06-16  70.0000 
2017-06-15  69.9000 
2017-06-14  70.2700 

をあなたが読んで、失敗した原因に興味があるなら... 2つの非常に類似したリストを設定

> Xnum = list(list(x=1),list(x=2)) 
> Xchar = list(list(x="1"),list(x="2")) 

xビットをデータフレームに変換します。数値の場合、それは動作しますが、あなたが見るように、列名は少し長いですが、ない問題:

> as.data.frame(sapply(Xnum,function(f){f$x})) 
    sapply(Xnum, function(f) {  f$x }) 
1          1 
2          2 

しかし、文字1のために、それは本当の混乱になる:

> as.data.frame(sapply(Xchar,function(f){f$x})) 
Error in as.data.frame.vector(x, ..., nm = nm) : 
    'names' attribute [3] must be the same length as the vector [1] 

sapply(Xchar,function(f){f$x})式を3つの部分に分割してしまうからです。なぜ私は数字のバージョンがこれに惑わされないのか分かりません。

+0

ありがとう(URL1、= TRUEが平ら) ! setNames line.library(jsonlite) ライブラリ(カール) url1 = "https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol=MSFT&apikey=demo" StockData2 < - fromJSON(url1、フラット= TRUE) – DC55

+0

ありがとう! setNames行の実行に問題があります。 '調整された終了']]}))、c( "調整された終了"、 " ) ')'の結果、as.data.frame.vector(x、...、nm = nm)のエラーが発生します。 'names'属性[3]はベクトル[1]と同じ長さでなければなりません** I申し訳ありませんが、これをフォーマットするのにも問題があります。 – DC55

+0

私はかっこが正しくペアになっていると確信しています。私は本当にこれを働かせようとしました。それ以上のポインターは非常に高く評価されるだろう。 – DC55

関連する問題