У меня есть данные с двумя (потенциально более) столбцами идентификаторов (обычно это длинные строки). Они иногда отличаются, опечатки или меняются с течением времени. Я хочу идентифицировать уникальные предметы в данных. Это требует идентификации групп дел, которые связаны через их идентификаторы на некотором уровне.
Пример
df <- data.frame(ida = c("A", "B", "C", "C", "D", "E"),
idb = c(1, 1, 3, 4, 4, 7),
trueid = c("id1", "id1", "id2", "id2", "id2", "id3"))
> df
ida idb trueid
1 A 1 id1
2 B 1 id1
3 C 3 id2
4 C 4 id2
5 D 4 id2
6 E 7 id3
Идентификаторы для id1
: "A", "B", 1
, для id2
"C", "D", 3, 4
и для id3
"E", 7
.
Я не знаю trueid
, но нужно найти его, используя информацию из столбцов ida
и idb
.
Решение должно масштабироваться до миллионов наблюдений с десятками тысяч уникальных идентификаторов. Я уже использую data.table
.
Расширение : существует другой сценарий, в котором имеется более двух столбцов, и некоторые столбцы могут быть информативными для других, т. Е. Иметь одинаковые идентификаторы. Я не знаю, какие столбцы являются информативными для каких. Я думаю, что тип можно игнорировать, хотя все столбцы являются строками или могут быть безопасно преобразованы.
Еще один пример для этого:
df <- data.frame(ida = c("A", "B", "C", "C", "D", "E"),
idb = c("1", "2", "3", "4", "4", "7"),
idc = c("1", "1", "2", "3", "4", "5"),
idd = c("1", "A", "2", "3", "4", "5"),
trueid = c("id1", "id1", "id1", "id1", "id1", "id2"))
> df
ida idb idc idd trueid
1 A 1 1 1 id1
2 B 2 1 A id1
3 C 3 2 2 id1
4 C 4 3 3 id1
5 D 4 4 4 id1
6 E 7 5 5 id2
Редактировать: Как отметил комментатор, это по сути проблема клики нахождения полных подграфов в графе. Прочитав немного больше, я понимаю, что эту проблему можно решить с помощью library(igraph)
. Я оставляю вопрос открытым, так как предпочел бы решение, основанное на base
, data.table
или dplyr
. Я не могу легко установить пакеты на сервере, который я использую, установка igraph
требует большого количества волокиты и задержек.
Edit2: Для тех, кто читает это и сталкивается с подобной проблемой: zx8754
ответ с использованием igraph значительно (на несколько порядков) быстрее для больших (смоделированных) данных с большим количеством групп. Если у вас есть возможность использовать igraph
, сделайте это.