У меня есть список фреймов данных в R. Каждый фрейм данных содержит сотни тысяч записей.В каждом кадре данных я хочу добавить новый столбец, и значение этого столбца будет вычисляться другими столбцами того же кадра данных.Я делаю это, используя 2 вложенных для циклов, но это занимает очень много времени.Я хочу использовать параллельные вычисления с использованием пакета doParallel и функции foreach.
Каждый фрейм данных в списке содержит 3 столбца, а именно: Широта, Долгота и Время получения.Я перебираю каждый фрейм данных в списке, затем добавляю 2 столбца в виде distance_difference и time_diff.Параметр distance_difference будет содержать расстояние haversine между двумя соответствующими ответами Lat, Long и time_diff, которые будут содержать разницу во времени между соответствующими значениями Received_time.
for(i in 1:length(file_list)){
file_list[[i]]$distance_difference=0
file_list[[i]]$time_diff=0
for(j in 1:nrow(file_list[[i]])){
file_list[[i]]$distance_difference[j-1]=distm(c(file_list[[i]][j,2], file_list[[i]][j,1]), c(file_list[[i]][j-1,2], file_list[[i]][j-1,1]), fun = distHaversine)
file_list[[i]]$time_diff[j-1]=difftime(file_list[[i]]$received_at[j],
file_list[[i]]$received_at[j-1], units = "secs")
}
print(i)
}
Исходный кадр данных:
lat long received_at
1 23.09818 72.63290 2018-12-01 06:38:38
2 23.09818 72.63290 2018-12-01 06:38:40
3 23.09818 72.63290 2018-12-01 06:38:40
4 23.09879 72.63232 2018-12-01 06:39:35
5 23.09854 72.63052 2018-12-01 06:40:07
6 23.09830 72.62988 2018-12-01 06:40:31
Ожидаемый результат:
lat long received_at distance_difference time_diff
1 23.09818 72.63290 2018-12-01 06:38:38 0 2
2 23.09818 72.63290 2018-12-01 06:38:40 0 0
3 23.09818 72.63290 2018-12-01 06:38:40 90 55
4 23.09879 72.63232 2018-12-01 06:39:35 186 32
5 23.09854 72.63052 2018-12-01 06:40:07 69 24
6 23.09830 72.62988 2018-12-01 06:40:31 1386 124
Это заголовок отдельного кадра данных в списке.Я хочу сделать вычисления быстро.Я могу подумать об использовании doParallel и foreach, но если есть какие-либо другие модификации, которые могут вычислить это быстро, пожалуйста, дайте мне знать.Спасибо
Общее количество записей в Списке составляет около 120 000 000 (сумма всех записей всех фреймов данных), поэтому мне нужно вычислить расстояние и разницу во времени для файла haversine для 120 000 000 записей.