2

交換データの古典的な「time * OHLC」データ形式から次の data.frame を作成したいと思います。

開始点は次のデータ フレームです。

      Date   Time    Open    High     Low   Close
01/28/2002   0833  543.81  543.82  543.84  543.85
01/28/2002   0850  542.95  542.95  542.95  542.95
01/28/2002   0901  542.45  542.45  542.45  542.45
01/28/2002   0911  542.45  542.45  542.45  542.45

テーブルには 1534129 行あります。次の構造にデータを移動することに少し必死です。

      Date  Time   Price
01/28/2002  0833  543.81
01/28/2002  0833  543.82
01/28/2002  0833  543.84
01/28/2002  0833  543.85
01/28/2002  0850  542.95

これが最初の行を書き換える方法であり、この拡張子を元のファイルのすべての行で繰り返す必要があります。私のタスクの 2 番目の部分は、バー作成段階で高値または安値が最初に来るかどうかを決定するパラメーター (分布) を設定することです。もちろん、これは後でデータ操作にさらに影響を与えますが、まだ出発点には達していません。

後で、コードを操作して、常に高を選択した場合にデータがどのように見えるかを決定したいと思います。次に、最初に低が作成されます (そしてその反対)。最初に行きます。

うまくいけば、タスク (質問) が正確に説明されます。私はすべてのヒント、またはアイデアを嬉しく思います。ご協力ありがとう御座います。

4

2 に答える 2

3

試す

 library(tidyr)
 library(dplyr)
 df1 <- df %>%
             gather(Var, Price, Open:Close) %>%
             arrange(Date, Time) %>%
             select(-Var)


 head(df1)
 #        Date Time  Price
 #1 01/28/2002  0833 543.81
 #2 01/28/2002  0833 543.82
 #3 01/28/2002  0833 543.84
 #4 01/28/2002  0833 543.85
 #5 01/28/2002  0850 542.95
 #6 01/28/2002  0850 542.95

データ

 df <-structure(list(Date = c("01/28/2002", "01/28/2002", "01/28/2002", 
 "01/28/2002"), Time = c("0833", "0850", "0901", "0911"), Open = c(543.81, 
 542.95, 542.45, 542.45), High = c(543.82, 542.95, 542.45, 542.45
 ), Low = c(543.84, 542.95, 542.45, 542.45), Close = c(543.85, 
 542.95, 542.45, 542.45)), .Names = c("Date", "Time", "Open", 
"High", "Low", "Close"), row.names = c(NA, -4L), class = "data.frame")
于 2014-10-21T10:41:46.853 に答える
2

「data.table」を使用すると、次のように長い形式のデータを取得できます。

library(data.table)
as.data.table(df)[, list(Price = unlist(.SD)), by = list(Date, Time)]
#           Date Time  Price
#  1: 01/28/2002 0833 543.81
#  2: 01/28/2002 0833 543.82
#  3: 01/28/2002 0833 543.84
#  4: 01/28/2002 0833 543.85
#  5: 01/28/2002 0850 542.95
#  6: 01/28/2002 0850 542.95
#  7: 01/28/2002 0850 542.95
#  8: 01/28/2002 0850 542.95
#  9: 01/28/2002 0901 542.45
# 10: 01/28/2002 0901 542.45
# 11: 01/28/2002 0901 542.45
# 12: 01/28/2002 0901 542.45
# 13: 01/28/2002 0911 542.45
# 14: 01/28/2002 0911 542.45
# 15: 01/28/2002 0911 542.45
# 16: 01/28/2002 0911 542.45

または、 を参照することもできますmelt。これは、情報 (列名) を失うことがないため、より安全に思えます。

于 2014-10-21T11:16:31.930 に答える