Ich habe Probleme, etwas ziemlich Einfaches zu tun: Wenden Sie eine rollende Funktion (Standardabweichung) nach Gruppe in einer data.table an. Mein Problem ist, dass, wenn ich eine data.table mit rollapply by einige Spalte verwende, data.table die Beobachtungen wie in der Warnmeldung unten beschrieben recycelt. Ich möchte NAs für die Beobachtungen erhalten, die außerhalb des Fensters liegen, anstatt die Standardabweichungen zu recyceln.Wenden Sie eine Rollfunktion nach Gruppe in r an (zoo, data.table)
Das ist mein Ansatz so weit Iris verwendet, und ein Rollfenster der Größe 2, nach rechts ausgerichtet:
library(zoo)
library(data.table)
A <- iris
setDT(A)
A[,stdev := rollapply(Petal.Width, width = 2, sd, align = 'right', partial = F),by = Species]
Warning messages:
1: In `[.data.table`(A, , `:=`(stdeev, rollapply(Petal.Width, width = 2, :
Supplied 49 items to be assigned to group 1 of size 50 in column 'stdeev' (recycled leaving remainder of 1 items).
2: In `[.data.table`(A, , `:=`(stdeev, rollapply(Petal.Width, width = 2, :
Supplied 49 items to be assigned to group 2 of size 50 in column 'stdeev' (recycled leaving remainder of 1 items).
3: In `[.data.table`(A, , `:=`(stdeev, rollapply(Petal.Width, width = 2, :
Supplied 49 items to be assigned to group 3 of size 50 in column 'stdeev' (recycled leaving remainder of 1 items).
> A
Sepal.Length Sepal.Width Petal.Length Petal.Width Species stdeev stdev
1: 5.1 3.5 1.4 0.2 setosa 0.00000000 0.00000000
2: 4.9 3.0 1.4 0.2 setosa 0.00000000 0.00000000
3: 4.7 3.2 1.3 0.2 setosa 0.00000000 0.00000000
4: 4.6 3.1 1.5 0.2 setosa 0.00000000 0.00000000
5: 5.0 3.6 1.4 0.2 setosa 0.14142136 0.14142136
---
146: 6.7 3.0 5.2 2.3 virginica 0.28284271 0.28284271
147: 6.3 2.5 5.0 1.9 virginica 0.07071068 0.07071068
148: 6.5 3.0 5.2 2.0 virginica 0.21213203 0.21213203
149: 6.2 3.4 5.4 2.3 virginica 0.35355339 0.35355339
150: 5.9 3.0 5.1 1.8 virginica 0.42426407 0.42426407
danke! Was stimmt wirklich überein? Ich dachte, es fängt an, das Fenster von links zu zählen, also hätte ich zwei NA vor dem ersten Wert erwartet. – dleal
Wenn Sie rechts ausrichten, wird der erste rollende Wert am rechten Ende des Fensters platziert, sodass eine Fensterlänge von zwei ergibt NA für den ersten Wert. Links ausrichten ergibt NA für den letzten Wert. – eipi10
also, wenn es Breite 3 war, und nach rechts ausrichten, würde ich zwei NAs vor dem ersten Wert sehen? – dleal