我正在进行一些大众运输分析。我有两个大型数据帧,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
}
}
}
}
}
}
}
然而,这个循环需要几天才能完成帧并生成结果。我认为代码效率不高。 您是否有关于如何显着加快手术速度的建议?