如何将R数据帧与非精确条件(大于/小于条件)组合

时间:2019-02-01 16:03:45

标签: r dataframe time

我必须组合两个具有交易和报价信息的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 |
+--------+-----------+----------+-------+-------+-------+

1 个答案:

答案 0 :(得分:0)

考虑以10的增量合并计算字段,具体来说,在两个数据集中计算10的倍数的列,然后使用 Symbol 合并到该字段。

transformwithin下面用于分配和取消分配帮助者字段 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)

甚至更多,您可能分别需要对两个数据集使用floorceiling的倒数来计算报价的时间戳的最高倍数和交易的<< em>时间戳:

within(quotes, mult10 <- ceiling(Timestamp / 15) * 15)

within(trades, mult10 <- floor(Timestamp / 5) * 5)