2

多くの時系列のデータを含む 1 次元の csv があり、各時系列には 2 つのラベルがタグ付けされています。

ファイルを R に読み込んだ後、データを 3D マトリックスにすばやく変換するには、どのキー関数を使用すればよいですか?

データの形式は次のとおりです。

Date, Price, Stock Ticker, Country
1/1/2012, 98, ABC.US, US
1/2/2012, 100, ABC.US, US
.
.
.
1/1/2012, 36, XYZ.US, US
1/2/2012, 34, XYZ.US, US
.
.
.
.
1/1/2012, 78, MNO.LN, UK
1/2/2012, 75, MNO.LN, UK
.
.

このテーブルを、日付、株式ティッカー、および国の次元を持つ 3D 配列に変換したいと考えています。

3DTable[Date,Ticker,Country]
4

3 に答える 3

3

@sebastian-cがあなたの質問を正しく解釈したと仮定すると、これはベースRのワンライナーでそこにたどり着きます:

tapply(x$Price, x[, -2], c)
# , , Country = UK
# 
#           Stock.Ticker
# Date       ABC.US MNO.LN XYZ.US
#   1/1/2012     NA     78     NA
#   1/2/2012     NA     75     NA
# 
# , , Country = US
# 
#           Stock.Ticker
# Date       ABC.US MNO.LN XYZ.US
#   1/1/2012     98     NA     36
#   1/2/2012    100     NA     34
于 2012-07-18T08:22:17.267 に答える
1

私はあなたが望むものに対する答えを持っていると思います。

データ フレームの作成

x <- data.frame(Date=rep(c("1/1/2012", "1/2/2012"), 3), 
  Price=c(98, 100, 36, 34, 78, 75),
  "Stock Ticker"=rep(c("ABC.US", "XYZ.US", "MNO.LN"), each=2), 
  Country=rep(c("US", "US", "UK"), each=2))

可能なすべてのオプションのセットを作成する

all.opts <- expand.grid(Date=levels(x$Date), 
  Stock.Ticker=levels(x$Stock.Ticker), 
  Country=levels(x$Country))

これをデータと結合します(ベースRに方法があるかもしれませんが、私は知りません)

library(plyr)
x2 <- join(all.opts, x)

配列を作る

x.arr2 <- array(x2$Price, dim=c(2, 3, 2), 
  dimnames=list(levels(x2$Date), levels(x2$Stock.Ticker), levels(x2$Country)))

手仕事を賞賛する:

x.arr2

#, , UK
#
#         ABC.US MNO.LN XYZ.US
#1/1/2012     NA     78     NA
#1/2/2012     NA     75     NA
#
#, , US
#
#         ABC.US MNO.LN XYZ.US
#1/1/2012     98     NA     36
#1/2/2012    100     NA     34
于 2012-07-18T06:56:49.700 に答える
0

これを試して:

library(plyr)
daply(x, c("Date", "Stock Ticker", "Country"), function(y) y$Price)

の最初の引数daplyはデータ フレーム、2 番目はディメンションとして使用する変数 (データの読み取り方法によっては、スペースをドットに変更する必要がある場合があります)、3 番目は次を計算する関数です。 daraframe 行からの配列値。

于 2012-07-18T08:17:26.027 に答える