Эта проблема очень похожа на эту Фильтрация кадра данных путем сопоставления значений из двух столбцов , но я думаю, что все же по-другому. В приведенном примере требуется просто сопоставить два столбца по значениям для одной и той же строки. Я пытаюсь отфильтровать таблицу данных по совпадающим значениям в двух столбцах, которые могут быть разбросаны по всему диапазону таблицы данных.
Результирующий data.table должен выглядеть следующим образом, и он должен в основном фильтровать строки, которые имеют совпадающие значения между msg_seq_nb
и orig_msg_seq_nb
. Я знаю, что мог бы достичь этого путем объединения двух таблиц data.table в двух столбцах, но я подумал, что должен быть более простой способ, который предотвратит объединение и дополнительные издержки, которые это может создать.
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 не являются уникальными в этом наборе данных.