Я застрял на некоторых проблемах сходства строк.
Вот как выглядят мои данные (исходные данные огромны):
SerialNumber SubSerialID Date
AGCC0775CFNDA1040TMT775 AVCC0775CFNDA1040 2018/01/08
AGCC0775CFNDA1040 AVCC0775CFNDA1040 2015/12/28
AGCC0775CFNDA10407EC AVCC0775CFNDA1040 2018/03/17
CH~MT765E~C0765HFNCC1056 BGDC0865HFNKG1043 2019/01/07
2658358 BGDC0865HFNKG1043 2018/08/09
MT765E~C0765KFNCD1044 C0765KFNCD10 2015/04/07
187A126 C0765KFNCD10 2017/11/31
...
Моя цель:
SerialNumber SubSerialID Date
AGCC0775CFNDA10407EC AVCC0775CFNDA1040 2018/03/17
CH~MT765E~C0765HFNCC1056 BGDC0865HFNKG1043 2019/01/07
2658358 BGDC0865HFNKG1043 2018/08/09
MT765E~C0765KFNCD1044 C0765KFNCD10 2015/04/07
187A126 C0765KFNCD10 2017/11/31
...
Серийные номера AGCC0775CFNDA1040TMT775
, AGCC0775CFNDA1040
и AGCC0775CFNDA10407EC
— это одно и то же, но они вызваны ошибками. Я хочу оставить AGCC0775CFNDA10407EC
, потому что у него самая последняя дата записи. Однако я не могу использовать SubSerialID
и Date
напрямую для фильтрации этих серийных номеров, потому что if удалит 2658358
.
Я думал об использовании stringdist
для поиска сходства строк в качестве еще одного условия (т. Е. Отфильтровать по абс (сходство)> 1,5 и абс (сходство) ‹0,5), но не могу найти эффективный способ справиться с этим. Данные огромны, и использование цикла for непрактично. Я застрял на некоторое время, и, надеюсь, кто-то может дать мне совет или предложение по этому вопросу.