Рассчитать большое количество перестановок в R - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть 2 больших фрейма данных в R, оба с приблизительно 100k строками, которые содержат списки географических координат (широта / долгота). Я пытаюсь перебрать их, получая все комбинации между элементами и после, применяя к ним функцию.

Поскольку число комбинаций составляет около 11 миллиардов (11 x 1.000.000.000), моя первоначальная идея использования цикла неприменима.

Фреймы данных будут выглядеть примерно так:

A<-as.data.frame(cbind(rbind(-0.1822,-0.4419,0.2262),rbind(51.5307,51.4856,51.4535)))

(...)
<!-- -->

V1 . V2

-0.1822 . 51.5307 

-0.4419 . 51.4856

 0.2262 . 51.4535

B<- as.data.frame(cbind(rbind(-0.4764,-0.2142,-0.2197),rbind(51.5221,51.4593,51.5841))) 
(...)
<!-- -->

V1 . V2

-0.4764 . 51.5221

-0.2142 . 51.4593

-0.2197 . 51.5841

Я бы хотел, чтобы результат выглядел следующим образом:

V1a .   V2a .   V1b .   V2b


-0.1822 . 51.5307 . -0.4764 . 51.5221  

-0.4419 . 51.4856 . -0.4764 . 51.5221

 0.2262 . 51.4535 . -0.4764 . 51.5221

-0.1822 . 51.5307 . -0.2142 . 51.4593

-0.4419 . 51.4856 . -0.2142 . 51.4593

(...)

В другом посте здесь в stackoverflow ([ссылка] Расчет матрицы расстояний большого круга ) предлагается использовать:

применить (A, 1, FUN = функция (X) distHaversine (X, B))

Однако я подозреваю, что созданная матрица слишком велика для выполнения вычислений.

Есть идеи, как решить это эффективно? Помня о том, что после этого моя цель - применить функцию Haversine для вычисления расстояний между точками.

Спасибо J * * тысяча двадцать-один

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018
cmb<-expand.grid(1:nrow(A),1:nrow(B))
cbind(A[cmb[,1],],B[cmb[,2],])

В отличие от решения Андре, это не создаст комбинации столбцов в каждом из A и B (он создает 81 строку, тогда как для этого примера желательны только 9). Не уверен, что это сработает для вашего большего набора данных.

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

То, что вы хотите:

# expand.grid(A$V1,A$V2,B$V1,B$V2)
expand.grid(cbind(A,B))

но, как вы уже поняли, результат будет очень большим, поэтому я не уверен, что ваш код будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...