簡體   English   中英

通過匹配不同行中兩列的值來過濾數據框

[英]Filtering the dataframe by matching values of two columns in different rows

這是一個非常類似於此問題的問題,該問題是通過匹配兩列的值來過濾數據框 ,但我認為仍然有所不同。 在示例中,只需要匹配同一行的值的兩列。 我正在尋找在兩列匹配值上過濾data.table的方法,這些值可以分散在data.table的整個范圍內。

產生的data.table應該看起來像這樣,它基本上應該過濾在msg_seq_nborig_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在此數據集中不是唯一的。

我想到的最簡單的方法是:

dt[orig_msg_seq_nb %in% msg_seq_nb | msg_seq_nb %in% orig_msg_seq_nb, ]

    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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM