如何在没有for循环的情况下搜索数据框?

时间:2019-02-08 15:04:54

标签: r dataframe for-loop

我有一个数据帧,其位置总线的速度为零(静止)。我想确定这是由于交通状况还是在公交车站停了下来。我有一个计算从公交车站中心到其他任何位置的距离的函数(该函数称为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
  }
}

2 个答案:

答案 0 :(得分:0)

请考虑合并两个数据集,这通常是两个数据集之间嵌套resource "null_resource" "example2" { provisioner "local-exec" { command= "C:\\Users\\Boopathi Kumar\\Downloads\\poscript1.ps1 -azureAplicationId ${var.appId} -azureTenantId ${var.tenantId} -azureSecret ${var.secret}" interpreter = ["powershell.exe", "-File"] } } 循环的矢量化对应物。然后,运行for,具体取决于返回的未知方法ifelse

请注意,以下内容未经测试,没有reproducible example和预期的结果。如果需要将所有记录都保留在其中一组中,请调整in_circle中的 all 参数。另外,根据需要调整?mergeby / by.x参数中的联接字段。

by.y

答案 1 :(得分:0)

我用geo_join函数解决了它。感谢您的帮助!