Ich möchte eine Kopie einer vorhandenen Spalte in einem Datenrahmen erstellen, der um eine Anzahl von Zeilen versetzt ist.R Erstellen Sie eine Kopie einer Spalte, in der die neue Spalte um einen festen Betrag versetzt ist.
z. wenn column2 eine Kopie von column1 um 1 versetzt ist, dann
> dataframe
$column1
[1] 1 2 3 4 5
$column2
[1] 0 1 2 3 4
Ich habe einige Erfolge mit dem folgenden Code hat:
offset7 <- rep(0, 7)
dataframe$column1.prev7 = c(offset7, dataframe$column1[1:(length(dataframe$column1)-7)])
aber es beginnt eine Fehlermeldung, wenn ich mit 30 oder mehr gegenüber. Meine Daten sind lang genug, dass dies kein Problem darstellt, da der Offset größer ist als die Anzahl der Zeilen. Der Fehler lautet:
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 freie Version, die schön mit Plyr spielt, wäre bevorzugt. Ziel ist es, die Zeitreihendaten bis zu einem Jahr in verschiedene Lags zu zerlegen und die Ergebnisse dann auf verschiedene Arten zu analysieren.
auf einer Nebennote: plyr ist nicht genau "loop free". Es ist eine Schleifenstruktur. –
Joris: Ich benutze plyr, um den Datenrahmen in Bits zu teilen, an denen ich dann einzeln arbeite, also bevorzuge etwas, das gut in diesen Workflow passt. Z.B. In diesem Fall habe ich die Marktdaten um das Aktiensymbol aufgespalten und dann eine neue Spalte hinzugefügt, die die vorherige Spalte um 30 Tage versetzt. Mein Code war: marketdata <- ddply (Marktdaten, c ("stock_symbol"), transformieren, adj.close.Prev30 = c (liste30, adj.close [1: (Länge (stock_symbol) -30)])), parallel = WAHR) aber danke für die heads-up! :) – psandersen