Ich habe Rohdaten mit der eindeutigen Kennung für jede Einheit in der Spalte mit den Timings gemischt. Um die Daten "zusammenzufassen", muss ich die uniqueID für jede Gruppe von Zeilen in der Spalte anhängen. Ein Teil meiner Schleife hat den obigen Klappentext abgeschnitten, dann führt ein 'iffelse' nach Text, strsplit, um die uniqueID zu erhalten, fügt dann ein, bis die nächste Textzeichenfolge gefunden wird, und wiederholt.R: Schnelle Methode zum bedingten Ersetzen von Spaltenwerten
Es funktioniert, aber es ist unglaublich langsam und ich muss es über viele rohe Daten wiederholen. (und ich habe keinen Zugriff auf die Herkunft Software die Form der Ausgabedatei zu ändern.)
durch die Foren Lese hat Lösungen für den Ersatz with a single variable gefunden, aber ich brauche eine Methode, um es von einer Linie zu extrahieren in der df.
Beispiel df:
time dist v3 v4
1: 2 10.2 ... ....
2: 3 10.2 ... ....
3: Veh: 123
4: 1 10.2 ... ....
5: 2 10.2 ... ....
6: 3 10.2 ... ....
7: Veh: 456
8: 1 10.2 ... ....
9: 2 10.2 ... ....
v <- 0001
for (m in 1:length(k2$time)) {
if(grepl('Veh', k2$time[m])) {v <- strsplit(k2$time[m], split=":")[[1]][2]} else{ k2$time[m]<-v }
}
Durch sie als Schleife laufen Ich weiß es wird die Spalte einfügen nach unten arbeiten, bis es eine andere Textzeichenfolge trifft. Das gewünschte Ergebnis sieht so aus.
time dist v3 v4
1: 0001 10.2 ... ....
2: 0001 10.2 ... ....
3: Veh: 123
4: 123 10.2 ... ....
5: 123 10.2 ... ....
6: 123 10.2 ... ....
7: Veh: 456
8: 456 10.2 ... ....
9: 456 10.2 ... ....
ich dann eine andere Linie, die die ganze data.frame läuft durch und entfernt die Zeilen Text enthält, so kann ich zusammenfassen
Ist jemand bewusst eine schnellere Lösung, vielleicht dplyr oder data.frame mit? Ich gab es 15 Minuten vor dem Abbruch eines Durchlaufs über 922.000 Zeilen Code und ich brauche es über mehrere Millionen zu laufen.
Ich habe keine Suchkombinationen mehr auf Stack Overflow.
Mit data.table-1.9.7 und dplyr-0.5.0 auf R-3.3.1
EDIT: Apologies, reproduzierbares Beispiel:
time <- c(1,2,"Veh: 123", 1:3,"Veh: 456", 1:3)
dist <- c(1:2,"",4:6,"",8:10)
v3 <- c(1:2,"",4:6,"",8:10)
k <-data.frame(time,dist,v3)
k$time <- as.character(k$time)
v <- 0001
for (m in 1:length(k$time)) {
if(grepl('Veh', k$time[m])) {v <- strsplit(k$time[m], split=":")[[1]][2] }else{ k$time[m]<-v }}
Hinweis: ' grepl() 'und' strsplit() 'sind beide vektorisiert. Das ist alles, was ich ohne ein reproduzierbares Beispiel tun kann. –
[Machen Sie dies zu einem reproduzierbaren Beispiel] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – shayaa