2016-10-26 4 views
0

Ich habe Daten in folgendem Format:R Datenrahmen: Erster Wert von nächsten Zeilen unter Kriterien

quotes <- read.csv(text = " 
id,ts,origin,product,bid,ask,nextts 
1,2016-10-18 20:20:54.733,SourceA,Dow,1.09812,1.0982, 
2,2016-10-18 20:20:55.093,SourceA,Ftse,7010.5,7011.5, 
3,2016-10-18 20:20:55.149,SourceA,Dow,18159.0,18161.0, 
4,2016-10-18 20:20:55.871,SourceA,Ftse,18159.0,18161.0,") 

Wie kann ich die Spalte ‚nextts‘ mit dem Wert von ts in der nächsten Zeile zu füllen, wo Quelle das gleiche und produkt ist das gleiche? Im Wesentlichen, die Daten an sich selbst zu verbinden (vorausgesetzt, es ist das gleiche Produkt und die Quelle) und den Wert von ts erfassen?

Ich fand die folgende Antwort, aber das ist eine strikte Vorlauf/Nachlauf ohne irgendwelche Kriterien.

Return next row in a dataframe R

+0

Ihre Daten nicht sehr gut lesbar ist, wie wäre es einfacher für uns zu machen und veröffentlichen eine 'dput (Anführungszeichen)'. –

Antwort

2

zunächst sicher, dass ts Charakter oder POSIXct ist eher als Faktor von explizit wie abgebildet Umwandlung oder durch das as.is=TRUE Argument read.csv verwenden. Dann verwenden Sie ave mit der angegebenen Funktion, um nach Gruppe zu verschieben.

quotes$ts <- as.character(quotes$ts) 
transform(quotes, nextts = ave(ts, origin, product, FUN = function(x) c(x[-1], NA))) 

geben:

id      ts origin product   bid  ask     nextts 
1 1 2016-10-18 20:20:54.733 SourceA  Dow  1.09812  1.0982 2016-10-18 20:20:55.149 
2 2 2016-10-18 20:20:55.093 SourceA Ftse 7010.50000 7011.5000 2016-10-18 20:20:55.871 
3 3 2016-10-18 20:20:55.149 SourceA  Dow 18159.00000 18161.0000      <NA> 
4 4 2016-10-18 20:20:55.871 SourceA Ftse 18159.00000 18161.0000      <NA> 
Verwandte Themen