Lets sagen, dass ich einen Datenrahmen mit der folgenden Struktur:beim Aufbau eines Datenrahmens mit überlappenden Beobachtungen
> DF <- data.frame(x=1:5, y=6:10)
> DF
x y
1 1 6
2 2 7
3 3 8
4 4 9
5 5 10
ich mit überlappenden Beobachtungen aus dem ersten Datenrahmen einen neuen Datenrahmen aufbauen müssen als ein verwendet werden Eingabe zum Erstellen der A-Matrix für die Rglpk-Optimierungsbibliothek. Ich würde Beobachtungsfenster der Länge n verwenden, so dass, wenn n = 2 ist, der resultierende Datenrahmen den Reihen 1 & 2, 2 & 3, 3 & 4 und so weiter beitreten würde. Die Länge des resultierenden Datenrahmen würde
(numberOfObservations-windowSize+1)*windowSize
Das Ergebnis in diesem Beispiel mit Window = 2 würde wie eine Struktur sein
x y
1 1 6
2 2 7
3 2 7
4 3 8
5 3 8
6 4 9
7 4 9
8 5 10
Ich konnte eine Schleife machen wie
DFResult <- NULL
numBlocks <- nrow(DF)-windowSize+1
for (i in 1:numBlocks) {
DFResult <- rbind(DFResult, DF[i:(i+horizon-1), ])
}
Dies scheint jedoch sehr ineffizient zu sein, insbesondere für sehr große Datenrahmen.
Ich habe auch versucht
rollapply(data=DF, width=windowSize, FUN=function(x) x, by.column=FALSE, by=1)
x y
[1,] 1 6
[2,] 2 7
[3,] 2 7
[4,] 3 8
, wo ich ohne Anwendung irgendeiner Aggregatfunktion einen Block von Zeilen zu wiederholen versuchte. Dies funktioniert nicht, da ich einige Zeilen vermisse
Ich bin ein bisschen ratlos und habe nach ähnlichen Problemen gesucht, konnte aber keine finden. Hat jemand bessere Ideen?