我在R中有一个数据框列表。每个数据框包含成千上万条记录。在每个数据框中,我想添加新列,并且该列的值将由同一数据框的其他列计算。我正在使用2个嵌套的for循环来执行此操作,但是这需要很长时间。 我想通过doParallel包和foreach函数使用并行计算。
列表的每个数据框包含3列,即纬度,经度和Received_time。 我要遍历列表中的每个数据框,然后添加2列作为distance_difference和time_diff。 distance_difference将包含两个对应的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的用法,但是如果还有其他修改可以快速计算出该值,请告诉我。谢谢
列表中的总记录约为12000万(所有数据帧的所有记录的总和),因此我必须计算12000万条记录的正弦距离和时差。