Ich möchte die data.table
Funktionen verwenden, um den Wert einer Spalte zu aktualisieren, indem Sie den Wert in vorherigen Zeilen auf den Wert verweisen. Hier ist ein BeispielAktualisieren der Spaltenwerte mit der vorherigen Zeile
> DT<-data.table(id=1:2,x=1:10,y=1)
Ich wusste schon data.table
wie unten zu vorherigen Zeilen in einer Art und Weise beziehen:
> DT[,z:=cumsum(y),keyby=id]
> DT[]
id x y z
1: 1 1 1 1
2: 1 3 1 2
3: 1 5 1 3
4: 1 7 1 4
5: 1 9 1 5
6: 2 2 1 1
7: 2 4 1 2
8: 2 6 1 3
9: 2 8 1 4
10: 2 10 1 5
jedoch das nächste Beispiel nicht funktioniert, wo versucht, eine Fibonacci
Serie erstellen mit vorherige Werte in Spalte y
zu aktualisieren. Es scheint, dass data.table keine Schleife verwendet, um die Berechnung iterativ durchzuführen. Kann jemand mir erklären, wie man dieses freundliche Problem unter Verwendung data.table
elegant löst?
> DT[,y:=shift(y,1,fill=0)+shift(y,2,fill=0),]
> DT[]
id x y z
1: 1 1 0 1
2: 1 3 1 2
3: 1 5 2 3
4: 1 7 2 4
5: 1 9 2 5
6: 2 2 0 1
7: 2 4 1 2
8: 2 6 2 3
9: 2 8 2 4
10: 2 10 2 5
Was ich wirklich will unten ist (Spalte y
wird aktualisiert):
id x y z
1: 1 1 1 1
2: 1 3 1 2
3: 1 5 2 3
4: 1 7 3 4
5: 1 9 5 5
6: 2 2 1 1
7: 2 4 1 2
8: 2 6 2 3
9: 2 8 3 4
10: 2 10 5 5
Sind Sie speziell nach einer "Fibonacci" -Sequenz oder einer allgemeineren Antwort? – SymbolixAU
Danke für deine Antwort, ich suche nach allgemeineren Antworten für diese Art von Problem, "Fibonacci" ist nur ein Beispiel – xappppp