R: Сбор строк на основе общего идентификатора - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь сделать набор данных о расписании железных дорог пригодным для проекта.Необработанные данные имеют следующую структуру:

#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 или любого другого метода для сбора данных, принадлежащих одной поездке водин ряд.Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...