【问题标题】:How to bind multiple data sets with different number of rows by the first row using R如何使用R通过第一行绑定具有不同行数的多个数据集
【发布时间】:2014-02-06 01:19:39
【问题描述】:

我正在尝试通过数据集的第一列“TimeStamp”绑定多个股票。其余列是开盘价、最高价、最低价、收盘价、成交量。问题之一是它们都包含不同的行。第二个问题是“时间戳”是数字的,我无法弄清楚如何将其转换为适当的“时间”。我所知道的是,它们都是 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 163001387519189 35.5 35.90 35.4 35.5 100

1387519476 1.3633 1.3636 1.3632 1.3635 2001387519476 35.6 35.6 35.40 35.5 100

1387519798 1.3635 1.3635 1.3634 1.3634 2001387519798 35.8 35.95 35.4 35.5 100

【问题讨论】:

  • 你试过使用merge()吗?
  • 是的,我也尝试过使用merge(),但我的电脑最终死机了..谢谢
  • merge.xts 已知有内存问题,这可能导致计算机死机:stackoverflow.com/q/12028671/841830 这是从 2012 年 4 月开始的,我不确定是否已修复,或者内存问题仅适用于该问题的合并行用例。

标签: r xts stocks cbind


【解决方案1】:

你要使用的是plyrjoin命令。

join(x, y, by = "Time", type = "full")

【讨论】:

  • 我尝试过使用 join() 但我得到了 Error in [data.frame(x, by) : undefined columns selected 。你知道我该如何解决这个问题吗?
  • 我已经解决了这个问题.. 想要的结果是:join(x,y, by="Time",type="left") 再次感谢您
【解决方案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 分钟的间隔。

【讨论】:

  • 你真是个天才,我正在想办法弄清楚我到底是如何分解时间戳的。太感谢了。看起来足够准确,而且看起来它们毕竟不是 1 分钟的间隔。
猜你喜欢
  • 1970-01-01
  • 2015-04-21
  • 2015-03-28
  • 1970-01-01
  • 1970-01-01
  • 2020-06-25
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多