0

まだ作成に適していないデータ フレームから共分散行列を作成したいと考えています。

RPostgreSQL を使用してデータベースにクエリを実行した後、次のタイプのデータ フレームがあります。

pg_id item_id                        value   date
1     67808755896                    23.5    2016-11-12 
2     223337345                      0       2016-11-12 
3     254337000000                   1       2016-11-12 
4     34604777037                    0       2016-11-12 
5     142223438000                   14.3    2016-11-12 
6     170555690000                   22      2016-11-12

データ フレーム全体は、およそ 16,000 の item_id を持つ ~500,000 行です。item_id が繰り返されます (ここで数か月を振り返ります)。

最終的にやりたいことは、item_id の値の共分散行列を作成することです。

そのために、最初のステップとして、次のようなデータ フレームになるようにデータ フレームを再配置します。

               item_id
   date          67808755896 223337345  254337000000  ...
   2016-11-12    value       value      value 
   2016-11-12    value       value      value               
   2016-11-12    value       value      value        
   2016-11-12    value       value      value      
   2016-11-12    value       value      value         
   2016-11-12    value       value      value 

私の問題は、必要な方法でデータ フレームを並べ替える方法がわからないことです。

検索時に目的の構造を取得するためのオプションを提供する SQL クエリがあれば、それが最適だと思います。

RI内で、メルトとスプレッドを使用していくつかのことを試しましたが、ローカルMacでは計算が重すぎるようで、最後に試したときはある時点でシャットダウンしました.

助けてくれてありがとう!

4

2 に答える 2

0

テーブルを調べる(データフレーム)

于 2017-01-05T12:32:44.990 に答える
0

R では、これはかなり高速に実行されるはずです。

library(data.table)
set.seed(1)
n_items <- 15996L; n_days <- floor(500000/n_items)
df <- data.frame(
  item_id = 1:n_items,
  date = rep(seq(Sys.Date(), Sys.Date()+n_days, by=1), each=n_items)
)
df$value <- runif(nrow(df))
dim(df)
# [1] 511872       3
uniqueN(df$item_id)
# [1] 15996
setDT(df)
system.time(wide <- dcast(df, date~item_id, value.var = "value", fun.aggregate = mean))
       # User      System verstrichen 
       # 0.19        0.00        0.20 
wide[1:5, 1:5]
#          date          1         2          3         4
# 1: 2017-01-05 0.26550866 0.3721239 0.57285336 0.9082078
# 2: 2017-01-06 0.09235838 0.3801334 0.03702181 0.5900971
# 3: 2017-01-07 0.24687042 0.9922133 0.53181526 0.5044988
# 4: 2017-01-08 0.29523145 0.2263145 0.33291640 0.1165338
# 5: 2017-01-09 0.83870267 0.3274892 0.95595348 0.3889042
于 2017-01-05T11:50:36.430 に答える