我必须组合两个具有交易和报价信息的R数据框。像联接一样,但是基于以秒为单位的时间戳。我需要将每个交易与最新报价匹配。报价多于交易。
我有这张有股票报价的表。时间戳以秒为单位:
+--------+-----------+-------+-------+
| Symbol | Timestamp | bid | ask |
+--------+-----------+-------+-------+
| IBM | 10 | 132 | 133 |
| IBM | 20 | 132.5 | 133.3 |
| IBM | 30 | 132.6 | 132.7 |
+--------+-----------+-------+-------+
这些是交易:
+--------+-----------+----------+-------+
| Symbol | Timestamp | quantity | price |
+--------+-----------+----------+-------+
| IBM | 25 | 100 | 132.5 |
| IBM | 31 | 80 | 132.7 |
+--------+-----------+----------+-------+
我认为本机R函数或dplyr可以做到-我已将其用于基本目的,但不确定如何在此处进行。有任何想法吗?
因此25秒的交易应与20秒的报价相匹配,而@ 31的交易应与@ 30的报价相匹配,如下所示:
+--------+-----------+----------+-------+-------+-------+
| Symbol | Timestamp | quantity | price | bid | ask |
+--------+-----------+----------+-------+-------+-------+
| IBM | 25 | 100 | 132.5 | 132.5 | 133.3 |
| IBM | 31 | 80 | 132.7 | 132.6 | 132.7 |
+--------+-----------+----------+-------+-------+-------+
答案 0 :(得分:0)
考虑以10的增量合并计算字段,具体来说,在两个数据集中计算10的倍数的列,然后使用 Symbol 合并到该字段。
在transform
和within
下面用于分配和取消分配帮助者字段 mult10 。在这种使用情况下,两个基本功能都是可以互换的:
final_df <- transform(merge(within(quotes, mult10 = floor(Timestamp / 10) * 10),
within(trades, mult10 = floor(Timestamp / 10) * 10),
by=c("Symbol", "mult10"),
multi10 = NULL)
现在,如果10倍数不能满足您的需要,请调整到所需的级别,例如15、5、2等。
within(quotes, mult10 <- floor(Timestamp / 15) * 15)
within(quotes, mult10 <- floor(Timestamp / 5) * 5)
within(quotes, mult10 <- floor(Timestamp / 2) * 2)
甚至更多,您可能分别需要对两个数据集使用floor
或ceiling
的倒数来计算报价的时间戳的最高倍数和交易的<< em>时间戳:
within(quotes, mult10 <- ceiling(Timestamp / 15) * 15)
within(trades, mult10 <- floor(Timestamp / 5) * 5)