У меня есть фрейм данных с позициями, где у шины была нулевая скорость (стоя на месте).Я хочу определить, связано ли это с условиями дорожного движения или потому что он остановился на автобусной остановке.У меня есть функция, которая рассчитывает расстояние от центра автобусной остановки до любой другой позиции (функция называется in_circle
).Если автобус остановился в 20 метрах от центра автобусной остановки, я устанавливаю stop_type
в 1 и перехожу к следующей точке, в которой автобус остановился.
Приведенный ниже код работает, но у меня большой объем данных, и два цикла for работают довольно долго.Поэтому мне интересно, есть ли более эффективный способ написания приведенного ниже кода.
Редактировать: я добавил изображение из нескольких строк данных.https://i.stack.imgur.com/Ekvqv.png
k=1
for(i in 1:NROW(df_bus_h_z)){
# Save current longitude and latitude of the bus
cur_lat <- df_bus_h_z[i, "latitude"]
cur_lon <- df_bus_h_z[i, "longitude"]
# Controll boolean
stop_found = FALSE
#Search trough all bus stops
for(j in 1:NROW(df_stop_all)){
if(df_stop_all[j,"trip_id"] == cur_trip){
# If the bus stopped at a bus stop
if(in_circle(df_stop_all[j,"stop_lat"],df_stop_all[j,"stop_lon"], cur_lat, cur_lon) <= 20){
df_bus_h_z[i, "stop_type"] <- 1
df_bus_h_z[i, "stop_id"] <- df_stop_all[j,"stop_id"]
stop_found = TRUE
break
}
}
}
if(stop_found == FALSE){
df_bus_h_z$stop_type[i] <- 0
}
}