1

3 つの変数を含むデータ テーブルがあります。

  1. 時間: 形式は int、値は [0,23] の範囲で、増加します
  2. mins: 形式は int、値は (10,20,30,40,50,60)、これも増加
  3. x: フォーマットは int

以下は簡単なサンプルです。

stocks <- data.frame(
hours = c(0,0,0,0,0,0),
mins = c(10,10,10,20,20,30),
x = c(2,4,4,5,3,4)
)

出力:

このテーブルに基づいて、時間と分に応じて複数の列を追加したいと考えています。以下のようになります。

    0_10 0_20 0_30
     2    5    4
     4    3    
     4        

dcast 関数を使用しようとしましたが、最終的なテーブルは X の頻度を計算するだけです :(

library(data.table)
dcast(setDT(stocks), x ~ hours+mins, value.var = c("x")) 
#Aggregate function missing, defaulting to 'length'
   x 0_10 0_20 0_30
1: 2    1    0    0
2: 3    0    1    0
3: 4    2    0    1
4: 5    0    1    0

なにか提案を ?

ありがとう !

4

1 に答える 1

2

式を変更する必要がありますdcast

library(data.table)#1.9.7+
dcast(setDT(stocks), rowid(hours, mins)~hours+mins, value.var = "x")[, hours := NULL][]
#   0_10 0_20 0_30
#1:    2    5    4
#2:    4    3   NA
#3:    4   NA   NA

バージョン < 1.9.7 では、「時間」、「分」でグループ化されたシーケンス変数を作成してから、dcast

setDT(stocks)[, Seq := 1:.N, by = .(hours, mins)]
dcast(stocks, Seq~hours + mins, value.var = "x")[, Seq := NULL][]
于 2016-11-03T09:26:16.140 に答える