Агрегировать фрейм данных на основе неупорядоченных пар столбцов
У меня есть набор данных, который выглядит примерно так:
id1 id2 size
1 5400 5505 7
2 5033 5458 1
3 5452 2873 24
4 5452 5213 2
5 5452 4242 26
6 4823 4823 4
7 5505 5400 11
гдеid1
а такжеid2
являются уникальными узлами в графе, иsize
это значение, присвоенноенаправленный край, соединяющий ихиз id1
в id2
, Этот набор данных довольно большой (чуть более 2 миллионов строк). То, что я хотел бы сделать, это сумма столбца размера, сгруппированных понеупорядоченные пары узлов изid1
а такжеid2
, Например, в первом ряду мы имеемid1=5400
а такжеid2=5505
, Существует еще одна строка во фрейме данных, гдеid1=5505
а такжеid2=5400
, В сгруппированных данных сумма столбцов размера для этих двух строк будет добавлена в одну строку. Другими словами, я хочу обобщить данные, по которым я группируюсь, на (неупорядоченном) наборе (id1, id2). Я нашел способ сделать это с помощьюapply
с пользовательской функцией, которая проверяет обратную пару столбцов в полном наборе данных, но это работает мучительно медленно. Кто-нибудь знает способ сделать это по-другому, возможно, сplyr
или с чем-то в базовых пакетах, что будет более эффективным?