R - Самый быстрый способ сделать краевой список из data.frame в длинном формате - PullRequest
0 голосов
/ 18 ноября 2018

Я ищу быстрое и масштабируемое решение для приведения массива data.frame из длинного формата в список краев в R.

Рассмотрим следующий data.frame:

df1 <- data.frame(ID=c("A1", "A1", "A1", "B1", "B1", "B1"),
              score=c(3,4,5,3,6,5))

> df1
  ID score
1 A1     3
2 A1     4
3 A1     5
4 B1     3
5 B1     6
6 B1     5

Результат должен выглядеть следующим образом.Обратите внимание, что элементы в score становятся узлами, которые связаны связями, если они содержатся в том же ID.

> el
  X Y
1 3 4
2 3 5
3 4 5
4 3 6
5 6 5

В исходном df1 содержится примерно 30 миллионов наблюдений, из которых необходимо часто рассчитывать пограничный список.

1 Ответ

0 голосов
/ 18 ноября 2018

Популярный (и эффективный) инструмент для данных большого размера - data.table:

library('data.table')
DT <- as.data.table(df1)
unique(DT[,as.data.frame(t(combn(score,2))), by = "ID"][,ID := NULL,])
#    V1 V2
# 1:  3  4
# 2:  3  5
# 3:  4  5
# 4:  3  6
# 5:  6  5
...