Рассчитать большое количество перестановок в R
У меня есть 2 больших фрейма данных в R, оба с примерно 100 000 строк, которые содержат списки географических координат (широта / долгота). Я пытаюсь перебрать их, получая все комбинации между элементами, а затем применяя к ним функцию.
Поскольку число комбинаций составляет около 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
(...)
В другом посте здесь в stackru ([ссылка] Расчет матрицы расстояний большого круга) предлагается использовать:
применить (A, 1, FUN= функция (X) distHaversine(X, B))
Однако я подозреваю, что созданная матрица слишком велика для выполнения вычислений.
Любые идеи о том, как решить это эффективно? Помня о том, что после этого моя цель - применить функцию Haversine для вычисления расстояний между точками.
Спасибо J
2 ответа
cmb<-expand.grid(1:nrow(A),1:nrow(B))
cbind(A[cmb[,1],],B[cmb[,2],])
В отличие от решения Андре, это не создаст комбинации столбцов в каждом из A и B (он создает 81 строку, тогда как для этого примера желательны только 9). Не уверен, что это сработает для вашего большего набора данных.
То, что вы хотите, это:
# expand.grid(A$V1,A$V2,B$V1,B$V2)
expand.grid(cbind(A,B))
но, как вы уже поняли, результат будет очень большим, поэтому я не уверен, что ваш код будет работать.