【发布时间】:2018-11-16 09:43:08
【问题描述】:
这是一个与Filtering the dataframe by matching values of two columns 非常相似的问题,但我认为仍然不同。在示例中,只需要在同一行的值上匹配两列。我希望根据两列中的匹配值过滤 data.table,这可以分散在 data.table 的整个范围内。
生成的 data.table 应该如下所示,它应该基本上过滤在msg_seq_nb 和orig_msg_seq_nb 之间具有匹配值的行。我知道我可以通过合并两列上的两个 data.tables 来实现这一点,但我认为必须有一种更简单的方法,它可以防止合并以及这可能产生的额外开销。
dt <- structure(list(cusip_id = c("00208J702", "00208J702", "00208J702",
"00208J702", "010284AH0", "010284AH0", "010284AH0", "U9220JAC4",
"U9220JAC4"), orig_msg_seq_nb = c(NA, NA, NA, NA, NA, NA, "0003081", NA, "0012889"), msg_seq_nb = c("0008911", "0009000", "0009075","0009152", "0031914", "0003081", "0003105", "0012889", "0017534" )), row.names = c(NA, -9L), class = c("data.table", "data.frame" ))
> dt
cusip_id orig_msg_seq_nb msg_seq_nb
1: 00208J702 <NA> 0008911
2: 00208J702 <NA> 0009000
3: 00208J702 <NA> 0009075
4: 00208J702 <NA> 0009152
5: 010284AH0 <NA> 0031914
6: 010284AH0 <NA> 0003081
7: 010284AH0 0003081 0003105
8: U9220JAC4 <NA> 0012889
9: U9220JAC4 0012889 0017534
结果应该是这样的
cusip_id orig_msg_seq_nb msg_seq_nb
1: 010284AH0 <NA> 0003081
2: 010284AH0 0003081 0003105
3: U9220JAC4 <NA> 0012889
4: U9220JAC4 0012889 0017534
请注意,msg_seq_nb 和 orig_msg_seq_nb 在此数据集中不是唯一的。
【问题讨论】:
-
因此对于上面的示例,您将过滤掉所有观察到的
cusip_id == 010284AH0?也许添加一个更大的例子以及预期的输出 -
对于匹配的工作来说,尖端并不重要。
dt基本上是想要的输出,最初的 data.table 是一样的,但列中的条目更多,不知道这样是否更容易获得。 -
最好也给出初始表...不需要很多条目。只是还有一些没有进行过滤
标签: r dplyr data.table