0

以下の 2 つのアセットの月額値を Yahoo から取得します。

if(!require("tseries") | !require(its) ) { install.packages(c("tseries", 'its'));  require("tseries"); require(its) } 
startDate <- as.Date("2000-01-01", format="%Y-%m-%d")
MSFT.prices = get.hist.quote(instrument="msft", start= startDate,
                               quote="AdjClose", provider="yahoo", origin="1970-01-01",
                               compression="m", retclass="its")
SP500.prices = get.hist.quote(instrument="^gspc", start=startDate,
                                quote="AdjClose", provider="yahoo", origin="1970-01-01",
                                compression="m", retclass="its")

これら 2 つを、指定された columnames を使用して単一のデータ フレームに入れたいと考えています (Pandas ではこれが可能になりました。R から data.frame の概念を取り入れているため、少し皮肉なことです)。以下のように、2 つの時系列に名前を割り当てます。

MSFTSP500.prices <- data.frame(msft = MSFT.prices, sp500= SP500.prices )

ただし、これは指定した列名を保持しません[msft, snp500]。別のコード行で列名を定義する必要があります。

colnames(MSFTSP500.prices) <- c("msft", "sp500")

呼び出しの中にcolnamesandを入れようとしましたが、うまくいきません。データ フレームの作成中に列名を定義するにはどうすればよいですか?col.namesdata.frame()

私は?data.frame非常に役に立たなかった...

4

2 に答える 2

2

コードは失敗し、 が利用できないことを示すエラー メッセージが表示されますas.its。そこで、不足しているコードを追加しました (2 回失敗した後、成功したようです)。不足しているrequire()呼び出しを発行すると、実際に返されるstrオブジェクトの種類を確認するために使用できます。get.hist.quote多くの点で動物園オブジェクトに似ていますが、データフレームでも動物園オブジェクトでもありません。

> str(SP500.prices)
Formal class 'its' [package "its"] with 2 slots
  ..@ .Data: num [1:180, 1] 1394 1366 1499 1452 1421 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr [1:180] "2000-01-02" "2000-01-31" "2000-02-29" "2000-04-02" ...
  .. .. ..$ : chr "AdjClose"
  ..@ dates: POSIXct[1:180], format: "2000-01-02 16:00:00" "2000-01-31 16:00:00" ...

これら 2 つのオブジェクトで実行するcbindと、dimnames を持つ通常のマトリックスが得られます。

> str(cbind(SP500.prices, MSFT.prices)  )
 num [1:180, 1:2] 1394 1366 1499 1452 1421 ...
 - attr(*, "dimnames")=List of 2
  ..$ : chr [1:180] "2000-01-02" "2000-01-31" "2000-02-29" "2000-04-02" ...
  ..$ : chr [1:2] "AdjClose" "AdjClose"

cbind.its列名を割り当てることができる がないように見えるため、列名を変更する必要があります。data.frameオブジェクトの動作が混乱する可能性があるため、このメソッドの使用には注意が必要です。

> str( MSFTSP500.prices )
'data.frame':   180 obs. of  2 variables:
 $ AdjClose  :Formal class 'AsIs', 'its' [package ""] with 1 slot
  .. ..@ .S3Class: chr  "AsIs" "its"
 $ AdjClose.1:Formal class 'AsIs', 'its' [package ""] with 1 slot
  .. ..@ .S3Class: chr  "AsIs" "its"

列はまだ S4 オブジェクトです。それらを他のメソッドに渡す場合は便利かもしれませんが、itsそうでない場合は混乱する可能性があります。これはあなたが撮影していたものかもしれません:

> MSFTSP500.prices <- data.frame(msft = as.vector(MSFT.prices), 
                                 sp500= as.vector(SP500.prices) ,
                           row.names= as.character(MSFT.prices@dates) ) 
> str( MSFTSP500.prices )
'data.frame':   180 obs. of  2 variables:
 $ msft : num  35.1 32 38.1 25 22.4 ...
 $ sp500: num  1394 1366 1499 1452 1421 ...
> head(rownames(MSFTSP500.prices))
[1] "2000-01-02 16:00:00" "2000-01-31 16:00:00" "2000-02-29 16:00:00"
[4] "2000-04-02 17:00:00" "2000-04-30 17:00:00" "2000-05-31 17:00:00"
于 2014-12-29T16:04:30.640 に答える
1

MSFT.prices は、オブジェクトに転送される独自の列名を持つデータ フレームに似た動物園オブジェクトです。与える

tmp <- data.frame(a=1:10)
b <- data.frame(lost=tmp)

2 番目の列名が失われます。

もしあなたがそうするなら

MSFTSP500.prices <- data.frame(msft = as.vector(MSFT.prices), 
     sp500=as.vector(SP500.prices))

次に、必要な colnames を取得します (ただし、動物園固有の動作は得られません)。ただし、2 番目のコマンドで列の名前を変更することに反対する理由がわかりません。

于 2014-12-29T15:54:48.977 に答える