Как связать несколько наборов данных с разным количеством строк по первой строке с помощью R

Я пытаюсь связать несколько акций с помощью «TimeStamp», который является 1-м столбцом в наборе данных. Остальные столбцы Open, High, Low, Close, Volume. Одна из проблем заключается в том, что все они содержат разные строки. Вторая проблема заключается в том, что «TimeStamp» является числовым, и я не могу понять, как преобразовать его в соответствующее «TIME». Все, что я знаю, это то, что все они представляют собой 1-минутные интервалы, и мне даны диапазоны на каждый день:

Эти диапазоны одинаковы для всех акций, которые я хочу связать.

DATE            BEGINNING   END
range: 20131220 1387515600  1387601940
range:20131223  1387774800  1387861140
range:20131224  1387861200  1387947540
range:20131226  1388034000  1388120340

Вот пример одной акции:

Time        Open    High    Low     Close   Volume
1387519189  1.3635  1.3635  1.3632  1.3634  16300
1387519476  1.3633  1.3636  1.3632  1.3635  200
1387519798  1.3635  1.3635  1.3634  1.3634  200
1387520045  1.3635  1.3636  1.3635  1.3635  100
1387520392  1.3635  1.3636  1.3634  1.3635  100
1387520637  1.3636  1.3636  1.3635  1.3635  100
1387520977  1.3635  1.3636  1.3635  1.3636  100
1387521292  1.3637  1.3637  1.3635  1.3635  400

Я попытался использовать cbind для привязки всех акций, но возникает ошибка, поскольку все они содержат разные строки. Я попытался преобразовать каждую акцию в объект xts, но, поскольку я не знаю, как разбить TIME, я не могу этого сделать. какие-либо предложения? Заранее спасибо!

Желаемый результат:

`Time   Open   High    Low   Close  Volume`     `Time   Open High Low Close Volume`  

1387519189 1.3635 1.3635 1.3632 1.3634 16300 1387519189 35.5 35.90 35.4 35.5 100

1387519476 1.3633 1.3636 1.3632 1.3635 200 1387519476 35.6 35.6 35.40 35.5 100

1387519798 1.3635 1.3635 1.3634 1.3634 200 1387519798 35.8 35.95 35.4 35.5 100


person Jason    schedule 16.01.2014    source источник
comment
Вы пробовали использовать merge()?   -  person Seth    schedule 17.01.2014
comment
да, я также пытался использовать merge(), но мой компьютер зависает .. спасибо   -  person Jason    schedule 17.01.2014
comment
Известно, что у merge.xts были проблемы с памятью, которые могли привести к зависанию компьютера: от апреля 2012 года, и я не уверен, было ли это исправлено, или проблема с памятью была только для варианта использования слияния строк этого вопроса.   -  person Darren Cook    schedule 17.01.2014


Ответы (2)


Что касается вашего вопроса о преобразовании временных меток во время, похоже, что они могут быть в формате POSIX (секунды с 1970-01-01). Вызов вашего примера df,

date.time <- as.POSIXct(df$Time, origin="1970-01-01")
time.only <- format(date.time,"%H:%M:%S")
df.times  <- data.frame(Time=df$Time, date.time, time.only)
df.times
#         Time           date.time time.only
# 1 1387519189 2013-12-20 00:59:49  00:59:49
# 2 1387519476 2013-12-20 01:04:36  01:04:36
# 3 1387519798 2013-12-20 01:09:58  01:09:58
# 4 1387520045 2013-12-20 01:14:05  01:14:05
# 5 1387520392 2013-12-20 01:19:52  01:19:52
# 6 1387520637 2013-12-20 01:23:57  01:23:57
# 7 1387520977 2013-12-20 01:29:37  01:29:37
# 8 1387521292 2013-12-20 01:34:52  01:34:52

Однако это не интервалы в 1 минуту.

person jlhoward    schedule 17.01.2014
comment
Ты гений, я ломал голову, пытаясь понять, КАК я могу разбить временные метки. Спасибо огромное. выглядит достаточно точным, и похоже, что это не 1-минутные интервалы в конце концов. - person Jason; 17.01.2014

То, что вы хотите использовать, это команда join plyr.

join(x, y, by = "Time", type = "full")
person americo    schedule 16.01.2014
comment
Я пытался использовать join(), но получаю Error in [data.frame(x, by) : undefined columns selected. Вы знаете, как я могу это исправить? - person Jason; 17.01.2014
comment
Я исправил проблему.. Желаемый результат: join(x,y, by="Time",type="left") Еще раз спасибо - person Jason; 17.01.2014