我正在尝试使铁路时间表数据的数据集可用于项目。原始数据具有以下结构:
#00000001
%100,11410, ,001,002,Nachtnettrein
%100,01412, ,002,007,Nachtnettrein
-00002,000,999
&IC ,001,007
>rtd ,2532
?11 ,11 ,00002
;rtn
;rta
;cps
;nwk
+gd ,2550,2557
?5 ,5b ,00002
;ztmo
;ztm
;ypb
;vb
;gvc
+gv ,2616,2623
?6 ,6 ,00002
;laa
;gvm
;vst
;dvnk
+ledn ,2635,2645
?5b ,5b ,00002
;ssh
;nvp
;hfd
+shl ,2700,2702
?1-2 ,1-2 ,00002
;asdl
;ass
+asd ,2716,2719
?11a ,11a ,00002
;asdm
;asa
;dvd
;asb
;ashd
;ac
;bkl
;mas
;utzl
<ut ,2758
?5 ,5 ,00002
#00000002
%100,11410, ,001,002,Nachtnettrein
我有兴趣根据旅行号将这些数据分开。每个行程编号均以#开头。我使用以下代码按行程编号分开
:DF <- read.delim("timetbls.dat", sep="#", skip=1)
这将产生以下结果:
> head(DF)
X X00000001
1 %100,11410, ,001,002,Nachtnettrein 1
2 %100,01412, ,002,007,Nachtnettrein NA
3 -00002,000,999 NA
4 &IC ,001,007 NA
5 >rtd ,2532 NA
6 ?11 ,11 ,00002 NA
其中X列包含该特定行程的某些数据,而X00000001列包含行程编号。仅在每个行程的第一行显示行程编号。其余的值为NA,直到检测到另一个跳闸号为止。现在,我想合并包含相同行程的行。第一步,我尝试创建一个for循环,用每个对应的行程号填充每个NA,因此以后我可以按该行程号进行分组。问题在于,对于超过一百万行的数据集来说,这个for循环的速度非常慢。
DF$X00000001[1] <- 1 #Initializing first number, which is normally missing out
DF$Trip[1] <-1 #Bruteforcing first trip number
for(i in dim(DF)[1] {
ifelse(DF$X00000001[i] == NA, DF$Trip[i] <- DF$Trip[i-1], DF$Trip[i] <-DF$X00000001[i])
}
我正在寻找替代for循环或任何其他方法来收集属于单行一次行程的数据。谢谢!