R Erstellen eine Kopie einer Spalte, in der die neuen Spalte mit einem festen Betrag versetzt ist,
Frage
Ich suche eine Kopie einer bestehenden Spalte einer Datenrahmen zu schaffen, die durch eine Anzahl von Reihen versetzt ist.
z. wenn column2 ist eine Kopie von column1 um 1 versetzt, dann
> dataframe
$column1
[1] 1 2 3 4 5
$column2
[1] 0 1 2 3 4
Ich habe einige Erfolge mit dem folgenden Code habe:
offset7 <- rep(0, 7)
dataframe$column1.prev7 = c(offset7, dataframe$column1[1:(length(dataframe$column1)-7)])
Allerdings beginnt es Fehler geben, wenn ich mit 30 oder mehr gegenüber. Meine Daten sind lang genug, um dies kein Problem des Offset größer ist als die Anzahl der Zeilen zu sein. Der Fehler ist:
Error in dataframe$column1[1:(length(dataframe$column1) - 30)] :
only 0's may be mixed with negative subscripts
Vielen Dank im Voraus! Eine schnelle Schleife kostenlose Version, die schön mit plyr spielt würde bevorzugt werden. Die Absicht hier ist es, die Zeitreihendaten in verschiedene Lags bis zu einem Jahr zu brechen und dann die Ergebnisse auf verschiedene Weise zu analysieren.
Lösung
Bitte verwenden, um eine richtige Zeitreihe Klasse für Zeitreihen Operationen. Beliebte Favoriten sind Zoo und xts die beide viel der Dokumentation.
Als einfaches Beispiel betrachten
> library(xts)
> foo <- xts(100:109, order.by=Sys.Date()+0:9)
> merge(foo, l1=lag(foo,1), lm1=lag(foo,-1))
foo l1 lm1
2010-11-18 100 NA 101
2010-11-19 101 100 102
2010-11-20 102 101 103
2010-11-21 103 102 104
2010-11-22 104 103 105
2010-11-23 105 104 106
2010-11-24 106 105 107
2010-11-25 107 106 108
2010-11-26 108 107 109
2010-11-27 109 108 NA
>
Aber gerade tut es nicht mit der Hand. Und such hier für '[r] xts' oder [r] Zoo‘im R-Tag suchen.