R:运行时问题,循环,两个大型数据帧,效率

时间:2018-04-30 08:08:30

标签: r

我正在进行一些大众运输分析。我有两个大型数据帧,df:“links”和df:“incl_1stop”。第一个包含原始数据,100000个障碍 - 所有现有的一个定向站 - 站(A到B)链路/边缘包括。到达和离开时间。第二个包含所有可能的“一站式转移”组合(意思是A从B到C),我用循环创建。

我现在想通过将df:“incl_1stop”的ABC与df中的所有“合适”视角联系起来创建所有可能的“两站式组合”:df中有条件地使用“链接”:“incl_1stop”==一个在df:“链接”和一些其他约束(见下文)。

我尝试了以下循环:

two_stop <- data.frame(stringsAsFactors = FALSE)
mtt <-5
total_travel_time <- 240

for(i in 1:length(incl_1stop$ID)){#all one stop paths
  for(j in 1:length(links$ID)){#all existing direct links
   if(incl_1stop$dest[i]==links$orig[j] & !is.na(incl_1stop$dest[i]) &!is.na(links$orig[j])){#destination one-stop path = origin link
    if((links$dep_minute[j] - incl_1stop$arr_minute[i]) >= mtt & !is.na(links$dep_minute[j]) &!is.na(incl_1stop$arr_minute[i])){#minimum transit time 
     if((links$arr_minute[j] - incl_1stop$dep_minute[i]) <= total_travel_time & !is.na(links$arr_minute[j]) &!is.na(incl_1stop$dep_minute[i])){#max travel time
      if(links$dest[j]!=incl_1stop$orig[i]& !is.na(links$dest[j])& !is.na(incl_1stop$orig[i])){#loop first origin
       if(links$dest[j]!=incl_1stop$dest[i]& !is.na(links$dest[j])& !is.na(incl_1stop$dest[i])){#loop second origin

          two_stop[k,1]<-incl_1stop$orig[i]#first node/origin
          two_stop[k,2]<-incl_1stop$dest[i]#second node
          two_stop[k,3]<-incl_1stop$dest2[i]#thrird node
          two_stop[k,4]<-incl_1stop$dep_minute[i]#depature time first node
          two_stop[k,5]<-incl_1stop$arr_minute2[i]#arrival time endpoint third node
          two_stop[k,6]<-incl_1stop_$prov2[i]#provider last path element

          two_stop[k,7]<-incl_1stop$ID1[i]#ID first edge
          two_stop[k,8]<-incl_1stop$ID2[i]#ID second edge

          two_stop[k,9]<-links$ID3[j]#ID additional/third edge
          two_stop[k,10]<-links$dep_minute[j]#depature time third element
          two_stop[k,11]<-links$dest[j]#destination third element/fourth node
          two_stop[k,12]<-paste0(incl_1stop$path[i],"_",links$dest[j]) #travel path
          two_stop[k,13]<-(links$arr_minute[j]-incl_1stop$dep_minute[i])#total travel time first node-fourth node
          k <- k+1 
        }
      }
    } 
  }
}
}
}

然而,这个循环需要几天才能完成帧并生成结果。我认为代码效率不高。 您是否有关于如何显着加快手术速度的建议?

0 个答案:

没有答案