Как добавить столбец к каждому элементу в списке данных, используя пакет doParallel - PullRequest
0 голосов
/ 23 января 2019

У меня есть список фреймов данных в 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 записей.

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