R:根据通用ID

时间:2018-10-13 09:53:17

标签: r merge

我正在尝试使铁路时间表数据的数据集可用于项目。原始数据具有以下结构:

#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循环或任何其他方法来收集属于单行一次行程的数据。谢谢!

0 个答案:

没有答案