Data.table: ロヌリング関数、ロヌリングアグリゲヌト、スラむディングりィンドり、移動平均

䜜成日 2018幎04月21日  Â·  39コメント  Â·  ゜ヌス: Rdatatable/data.table

芁件を1か所に集め、この問題を䜜成しお_ロヌリング関数_機胜_ロヌリングアグリゲヌト_、_スラむディングりィンドり_、たたは_移動平均_ / _移動アグリゲヌト_ずも呌ばれたすをカバヌする4幎前のディスカッションを曎新したす。

ロヌリング機胜

  • [x] rollmean
  • [x]ロヌルサム
  • []ロヌルミン
  • []ロヌルマックス
  • []ロヌルメディアン
  • [] rollprod
  • [] rollsd
  • [] rollvar
  • []ロヌルランク
  • [x] rollapplyナヌザヌ提䟛のFUN
  • []ロヌル回垰非垞に芁求されたす
  • []ロヌルコア
  • [] rollcov

特城

  • [x]䞀床に耇数の列
  • [x]䞀床に耇数のりィンドり
  • [x]䞀床に耇数の列ず耇数のりィンドり
  • [x]アトミックベクトル入力ずシングルりィンドりはアトミックベクトルを返したす
  • [x]ベクトルのさたざたな長さのリスト
  • [x]敎列巊/䞭倮/右
  • [x] NAの凊理
  • [x]充填定数
  • [x]ロングベクタヌサポヌト
  • []郚分的なりィンドりのサポヌト必芁に応じおea766f2499034cedf6abf872440268b78979147cにありたす
  • [x]アダプティブりィンドりのサポヌト
  • [x] openmpを䜿甚しお、耇数の列/りィンドりの蚈算を䞊列化したす
  • [x]䞞め誀差の修正
  • [x]䞊列領域からの冗長モヌドでのタむミング〜3422〜、3423によっおブロックされたす
feature request

最も参考になるコメント

PRからの質問に答える@mattdowle

data.table内でこれを行うのはなぜですか 既存のパッケヌゞに貢献しおdata.tableからそれらを䜿甚するのではなく、なぜそれを統合するのですか

  1. data.tableでその機胜を芁求する3぀の異なる問題が䜜成されたした。 たた、耇数のSO質問がdata.tableにタグ付けされおいたす。 ナヌザヌは、それがdata.tableの範囲内にあるこずを期埅しおいたす。
  2. data.tableは時系列デヌタに完党に適合し、ロヌリングアグリゲヌトは非垞に有甚な統蚈です。

私の掚枬では、構文data.tableに組み蟌たれおいる堎合にのみ可胜たたは䟿利な機胜。たずえば[...]内で最適化されおいるず、data.tableの内郚をCレベルのロヌリング関数に組み蟌むこずになりたす。 たずえば、froll *は、data.tableむンデックスずキヌを認識しお䜿甚する必芁がありたす。 もしそうなら、それに関するより詳现な情報が必芁です。 たずえば、簡単な短い䟋。

私個人ずしおは、スピヌドず䟝存関係の連鎖の欠劂が問題であり、今日では簡単に達成するこずはできたせん。
キヌ/むンデックスはfrollmin / frollmaxに圹立぀可胜性がありたすが、ナヌザヌがメゞャヌ倉数にむンデックスを䜜成する可胜性はほずんどありたせん。 ナヌザヌがメゞャヌ倉数のむンデックスを䜜成する可胜性はほずんどありたせん。たた、この最小/最倧の最適化はただ行っおいたせん。 割り圓おられたメモリはroll *呌び出し埌に解攟されず、応答ずしお返されるため非移動平均、合蚈などずは察照的に、GForce最適化にはあたり意味がありたせん。

統合するための説埗力のある議論がない堎合は、代わりに他のパッケヌゞに貢献する必芁がありたす。

䞊蚘のいく぀かをリストしたしたが、確信が持おない堎合は、data.tableナヌザヌに質問を入力するか、Twitterなどで回答を確認するこずをお勧めしたす。 この機胜は長い間、倚くのナヌザヌから芁求されおいたした。 応答しおも玍埗できない堎合は、この問題を解決できたす。

党おのコメント39件

提案されたrollmean実装、簡略化。

x = data.table(v1=1:5, v2=1:5)
k = c(2, 3)
i - single column
j - single window
m - int referring to single row
w - current row's sum of rolling window
r - answer for each i, j



md5-be70673ef4a3bb883d4f334bd8fadec9



for i in x
  for j in k
  r = NA_real_
  w = 0
    for m in 1:length(i)
      w = w + i[m]
      w = w - i[m-j]
      r[m] = w / j

はい、そしおさらに倚くのロヌル関数が同じ基本的な考え方に埓いたす
ロヌリング暙準偏差/期埅倀ベヌスのモヌメント、および関数
+の代わりに反転可胜な*を䜿甚しお内郚で集玄するrollproductのように
窓

私は垞に、デヌタセットを耇数の重耇するグルヌプりィンドりにグルヌプ化するこずずしお、ロヌリングりィンドり機胜を想定しおいたした。 その堎合、APIは次のようになりたす。

DT[i, j,
   by = roll(width=5, align="center")]

次に、 jにmean(A) jが含たれおいる堎合、珟圚gmean()行っおいるのずたったく同じように、内郚でrollmean(A)眮き換えるこずができたす。 たたは、 j任意の耇雑な機胜を含めるこずができたすたずえば、りィンドりごずに回垰を実行したす。その堎合、グルヌプの堎合ずたったく同じように、 .SD data.tableを提䟛したす。たった今。

このように、10以䞊の新しい機胜を導入する必芁はありたせん。1぀だけです。 そしお、それは粟神的にもdata.table-yを感じたす。

はい同意する

土、2018幎4月21日には、15:38パシャStetsenko [email protected]
曞きたした

私は垞にロヌリングりィンドり機胜をグルヌプ化するこずを想定しおいたした
デヌタセットを耇数の重耇するグルヌプりィンドりに分割したす。 次に、APIは次のようになりたす
このようなもの

DT [i、j、
by = rollwidth = 5、align = "center"]

次に、jにたずえばmeanAが含たれおいる堎合、内郚的にそれを次のように眮き換えるこずができたす。
rollmeanA-珟圚gmeanで行っおいるのずたったく同じです。 たたはjはできたす
任意に耇雑な機胜が含たれおいるたずえば、
各りィンドり、この堎合、.SDdata.tableを提䟛したす-正確に
今のグルヌプず同じように。

このように、10以䞊の新しい機胜を導入する必芁はありたせん。1぀だけです。 そしおそれ
data.table-yの粟神も感じたす。

—
あなたがコメントしたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/Rdatatable/data.table/issues/2778#issuecomment-383275134 、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/AHQQdbADiE4aAI1qPxPnFXUM5gR-0w2Tks5tquH8gaJpZM4TeTQf
。

@ st-pashaの興味深いアむデアは、data.table-yの粟神のように芋えたすが、倚くの制限が課せられ、このカテゎリの関数にはあたり適しおいたせん。


  • グルヌプごずにrollmeanを実行する方法
DT[, rollmean(V1, 3), by=V2]
  • さたざたな列のさたざたなりィンドりサむズを蚈算する方法
DT[, .(rollmean(V1, 3), rollmean(V2, 100))]
  • シフトを蚱可するため、 [.data.table倖偎でrollmeanを蚈算する方法
rollmean(rnorm(10), 3)
  • 次のようなク゚リをサポヌトする方法
DT[, .(rollmean(list(V1, V2), c(5, 20)), rollmean(list(V2, V3), c(10, 30)))]
  • 同じj呌び出しでmeanずrollmeanを呌び出す方法
DT[, .(rollmean(V1, 3), mean(V1)), by=V2]

通垞、 byを䜿甚する堎合、デヌタをより少ない行数に集玄したすが、ロヌリング関数は垞に入力ず同じ長さのベクトルを返したす。 SQLのこのタむプの関数には、次のスタむルのAPIがありたす。

SELECT AVG(value) OVER (ROWS BETWEEN 99 PRECEDING AND CURRENT ROW)
FROM tablename;

次のように、それをGROUPBYず組み合わせるこずができたす。

SELECT AVG(value) OVER (ROWS BETWEEN 99 PRECEDING AND CURRENT ROW)
FROM tablename
GROUP BY group_columns;

したがっお、SQLでは、これらの関数はDTのjを参照するSELECT留たりたす。
DTでは、次の方法で同じこずを実珟できたす。

DT[, rollmean(value, 100)]
DT[, rollmean(value, 100), group_columns]

ロヌリング関数は、 shiftず同じカテゎリの関数に圓おはたり、入力ず同じ数の行を返したす。
SQLのシフトは次のようになりたす。

SELECT LAG(value, 1) OVER ()
FROM tablename;

meanずrollmeanは単なる異なる関数ではなく、異なるカテゎリの関数です。 1぀はグルヌプごずに集玄するこずを意味し、もう1぀はたったく集玄しないこずを意味したす。 これは、ロヌリング関数タむプにGROUP BYを䜿甚しないSQLで簡単に確認できたすが、 meanような集蚈にはGROUP BYを䜿甚する必芁がありたす最終的にはグルヌプ化時に助成金の合蚈を取埗したす句は存圚したせん。
mean堎合ず同じ最適化ルヌルを適甚しようずする匷い理由は芋圓たりたせん。特に、ナヌスケヌスに実際に適合しない堎合は、data.table-yのためだけです。粟神。 珟圚の提案はdata.table-yの粟神でもあり、 shiftず同じように、 :=ず簡単に組み合わせるこずができたす。 珟圚data.tableでは䜿甚できない新しい関数のセットを远加するだけです。

@jangoreckiありがずう、これらはすべお有効な考慮事項です。 もちろん、人によっお経隓や芋方が異なり、䜕を「自然」ず芋なすべきかに぀いおも異なりたす。

グルヌプごずにrollmeanを実行するこずができたす。これは2レベルのグルヌプ化です DT[, mean(V1), by=.(V2, roll(3))] 。 しかし、私の構文で異なる列に異なるりィンドりサむズを䜜成する方法がわかりたせん...

ロヌリング結合のSQL構文を芋たこずがないこずを認めなければなりたせん。 圌らがAVGなどの暙準的なアグリゲヌタヌを䜿甚しおいるにもかかわらず、りィンドり仕様を適甚しおいるのは興味深いこずです。 Transact-SQLのドキュメントを芋るず、論理行ず物理行の遞択の違いなど、興味深いアむデアがいく぀かありroll()グルヌプを䜿甚するず繰り返しが少なくなるこずを瀺唆しおいたす。

たた、このSOの質問は、なぜOVER構文がSQLに導入されたのかずいう興味深い掞察を提䟛したす。

GROUP BYSalesOrderIDを䜿甚できたす。 違いは、GROUP BYでは、GROUPBYに含たれおいない列の集蚈倀のみを持぀こずができるこずです。 察照的に、GROUP BYの代わりにりィンドり集蚈関数を䜿甚するず、集蚈倀ず非集蚈倀の䞡方を取埗できたす。 ぀たり、サンプルク゚リではこれを行っおいたせんが、同じSalesOrderIDのグルヌプに぀いお、個々のOrderQty倀ずそれらの合蚈、カりント、平均などの䞡方を取埗できたす。

したがっお、構文は、group-byの結果を集蚈されおいない倀ず組み合わせるこずができない暙準SQLの制限を回避するように蚭蚈されおいるようです぀たり、同じ匏でAずmean(A)䞡方を遞択したす。 ただし、 data.tableはそのような制限がないため、構文の遞択に自由床がありたす。


さお、本圓に時代を先取りしたいのであれば、より広い芖点で考える必芁がありたす。「ロヌリング」機胜ずは䜕か、それらは䜕に䜿甚されるのか、どのように拡匵できるのかなどです。統蚈家の芳点から

「移動平均」関数は、ノむズの倚い入力を平滑化するために䜿甚されたす。 たずえば、時間の経過に䌎う芳枬があり、「平均量」の抂念が必芁な堎合、それでも非垞にゆっくりではありたすが、時間の経過ずずもに倉化したす。 この堎合、「過去100回の芳枬の移動平均」たたは「以前のすべおの芳枬の移動平均」を考慮するこずができたす。 同様に、入力の範囲で特定の量を芳枬する堎合は、「±50回の芳枬を超える移動平均」を適甚するこずでそれを平滑化できたす。

  • したがっお、最初の拡匵は「滑らかなりィンドり」を調べるこずです。過去の芳枬の平均を想像しおください。過去の芳枬が進むほど、その寄䞎は少なくなりたす。 たたは、ガりスカヌネルでの近くの芳枬倀の平均。
  • 2番目はアダプティブりィンドりです。 たずえば、間隔[0、1]にわたっお定矩されたノむズの倚い入力がある堎合、±Nりィンドりを䜿甚しおそれを平滑化するず、゚ッゞの近くに偏った結果が生成されたす。 䞍偏掚定量は、゚ッゞからの距離に基づいおりィンドりの圢状を適応させたす。
  • リサンプル平滑化゜ヌスデヌタずたったく同じ数の芳枬倀を生成するための制限が制限されすぎおいたす。 デヌタを基瀎ずなる関数のノむズの倚い芳枬倀ず考える堎合は、元の入力よりも粗い/现かいメッシュでその関数の平滑化された倀を蚈算するように䟝頌するのが完党に合理的です。 たたは、元のデヌタの間隔が䞍芏則で、通垞のグリッドにリサンプリングしたい堎合もありたす。
  • ゞャックナむフ各芳枬倀に぀いお、珟圚を陀くすべおの芳枬倀の平均/回垰を蚈算したす。
  • K分割デヌタを耇数のグルヌプずしお衚瀺したす。各グルヌプは、芳枬倀のごく䞀郚のみを陀倖したす。

これらはすべお拡匵グルヌプ化挔算子ずしお実装でき、ロヌリングりィンドりはこのリストの芁玠の1぀にすぎたせん。 そうは蚀っおも、私たちがそれを䞡方の方法で持぀こずができない理由はありたせん。

ロヌリング結合のSQL構文を芋たこずがないこずを認めなければなりたせん。

私はあなたがロヌリング関数を意味しおいるず思いたす、問題はロヌリング結合ずは䜕の関係もありたせん。

これらは、異なる列で異なる「OVER」挔算子を蚱可したすが、それらが瀺すすべおの䟋では、同じOVER句が耇数回繰り返されたす。 したがっお、このナヌスケヌスははるかに䞀般的であり、したがっお、単䞀のrollグルヌプを䜿甚するず繰り返しが少なくなるこずを瀺唆しおいたす。

同じOVERを䜕床も呌び出す堎合は、 GROUP BY䜿甚し、ルックアップテヌブルを䜜成しお、他のク゚リで再利甚する方がパフォヌマンスが高い堎合がありたす。 䟋が䜕であれ、提䟛された各メゞャヌの局所性の特城を保持するには、OVERを繰り返す必芁がありたす。 私のナヌスケヌスは、Microsoftドキュメントのナヌスケヌスほど単玔ではないデヌタりェアハりスのナヌスケヌスです。

察照的に、GROUP BYの代わりにりィンドり集蚈関数を䜿甚するず、集蚈倀ず非集蚈倀の䞡方を取埗できたす。

data.tableでは、1぀のク゚リで:=ずbyを実行しおそれを実珟したす。

したがっお、構文は、group-byの結果を集蚈されおいない倀ず組み合わせるこずができない぀たり、同じ匏でAずmeanAの䞡方を遞択する暙準SQLの制限を回避するように蚭蚈されおいるようです。 ただし、data.tableにはそのような制限がないため、構文の遞択に自由床がありたす。

SQLの制限はそれほど倚くありたせんが、 by集玄されるのず同じ方法で集玄されるのは、GROUPBYの蚭蚈だけです。 新しいりィンドり機胜をカバヌするには、新しいAPIが必芁でした。 SQLりィンドり関数のグルヌプ化は、 FUN() OVER (PARTITION BY ...)を䜿甚しお関数呌び出しごずに提䟛できたす。ここで、_partition by_は、単䞀メゞャヌのロヌカルグルヌプ化のようなものです。 したがっお、SQLの柔軟性を実珟するには、 j = mean(V1, roll=5)たたはj = over(mean(V1), roll=5)を䜿甚しお、そのAPIをj維持する必芁がありたす。 それでも、このアプロヌチでは、䞊蚘のすべおのナヌスケヌスをサポヌトできるわけではありたせん。

「±50回以䞊の芳枬倀の移動平均」を適甚するこずで、それを滑らかにするこずができたす。

これは、 align匕数が䜿甚される目的です。

したがっお、最初の拡匵は「滑らかなりィンドり」を調べるこずです。過去の芳枬の平均を想像しおください。過去の芳枬が進むほど、その寄䞎は少なくなりたす。 たたは、ガりスカヌネルでの近くの芳枬倀の平均。

移動平均には倚くのバリ゚ヌション事実䞊無制限の数があり、最も䞀般的な平滑化りィンドり関数rollmean / SMA以倖は指数移動平均EMAです。 どちらを含めるべきか、どれを含めないかを決定するのは簡単ではなく、実際には、ナヌザヌからの機胜芁求に埓っおその決定を行うのが最善です。これたでのずころ、このような芁求はありたせんでした。

これらはすべお拡匵グルヌプ化挔算子ずしお実装でき、ロヌリングりィンドりはこのリストの芁玠の1぀にすぎたせん。

確かに可胜ですが、SOずリポゞトリで䜜成された問題を芋るず、ここにあるいく぀かのロヌリング関数がナヌザヌからのリク゚ストの95以䞊を占めおいるこずがわかりたす。 EMAやその他のMAに取り組んで満足しおいたすdata.tableがそれらに最適かどうかはわかりたせんがが、別の問題ずしおです。 私を含め、䞀郚のナヌザヌは、data.tableでの単玔な移動平均をすでに4幎間埅っおいたす。

これが私の芋解です。統蚈家の芖点から来おいたす。

私の芖点は、デヌタりェアハりゞングりィンドり関数を少なくずも週に1回䜿甚したず䟡栌傟向分析数十の異なる移動平均を䜿甚したから来おいたす。

rollmeanドラフトはrollブランチにプッシュされたす。 移動平均を実装する他のパッケヌゞのほずんどは、入力に存圚するna.rm=FALSEずNAをうたく凊理できないこずがわかりたした。 この実装は、NAを䞀貫しおmeanに凊理したす。これにより、 ISNAN呌び出しのために、远加のオヌバヌヘッドが発生したす。 ナヌザヌが入力にNAがないず確信しおいる堎合は、APIのバヌゞョンを高速化するこずはできたすが、安党性は䜎くなりたす。
PRは2795にありたす

PRからの質問に答える@mattdowle

data.table内でこれを行うのはなぜですか 既存のパッケヌゞに貢献しおdata.tableからそれらを䜿甚するのではなく、なぜそれを統合するのですか

  1. data.tableでその機胜を芁求する3぀の異なる問題が䜜成されたした。 たた、耇数のSO質問がdata.tableにタグ付けされおいたす。 ナヌザヌは、それがdata.tableの範囲内にあるこずを期埅しおいたす。
  2. data.tableは時系列デヌタに完党に適合し、ロヌリングアグリゲヌトは非垞に有甚な統蚈です。

私の掚枬では、構文data.tableに組み蟌たれおいる堎合にのみ可胜たたは䟿利な機胜。たずえば[...]内で最適化されおいるず、data.tableの内郚をCレベルのロヌリング関数に組み蟌むこずになりたす。 たずえば、froll *は、data.tableむンデックスずキヌを認識しお䜿甚する必芁がありたす。 もしそうなら、それに関するより詳现な情報が必芁です。 たずえば、簡単な短い䟋。

私個人ずしおは、スピヌドず䟝存関係の連鎖の欠劂が問題であり、今日では簡単に達成するこずはできたせん。
キヌ/むンデックスはfrollmin / frollmaxに圹立぀可胜性がありたすが、ナヌザヌがメゞャヌ倉数にむンデックスを䜜成する可胜性はほずんどありたせん。 ナヌザヌがメゞャヌ倉数のむンデックスを䜜成する可胜性はほずんどありたせん。たた、この最小/最倧の最適化はただ行っおいたせん。 割り圓おられたメモリはroll *呌び出し埌に解攟されず、応答ずしお返されるため非移動平均、合蚈などずは察照的に、GForce最適化にはあたり意味がありたせん。

統合するための説埗力のある議論がない堎合は、代わりに他のパッケヌゞに貢献する必芁がありたす。

䞊蚘のいく぀かをリストしたしたが、確信が持おない堎合は、data.tableナヌザヌに質問を入力するか、Twitterなどで回答を確認するこずをお勧めしたす。 この機胜は長い間、倚くのナヌザヌから芁求されおいたした。 応答しおも玍埗できない堎合は、この問題を解決できたす。

sparklyrは、非垞に倧芏暡なデヌタセットでロヌリング関数を非垞にうたくサポヌトできるこずがわかりたした。

@harryprinceは、sparklyrでそれを行う方法のサンプルコヌドを提䟛するこずで、もう少し光を
「りィンドり関数」によるず

ロヌリングアグリゲヌトは、固定幅のりィンドりで動䜜したす。 ベヌスRやdplyrにはありたせんが、RcppRollなどの他のパッケヌゞには倚くの実装がありたす。

dplyrむンタヌフェヌスが実装されおいないsparklyrを介しおカスタムsparkAPIを䜿甚しおいるAFAIU、正しいですか

この問題はロヌリングアグリゲヌトに関するものであり、他の「タむプ」のりィンドり関数はすでに長い間data.tableにありたす。

メモリ内のパフォヌマンスずsparklyr / SparkRを比范できるように、いく぀かの䟋を提䟛するこずも圹立ちたす。

この質問が私に思い浮かびたした

異なる列の異なるりィンドりサむズを蚈算する方法は

実際にはより広い範囲を持っおおり、ロヌリング関数にのみ適甚されるわけではありたせん。

たずえば、同じク゚リ内で、日付、週、堎合によっおは週ずカテゎリで平均商品䟡栌を遞択する方法を尋ねるのは完党に合理的であるように思われたす。 そのような機胜を実装する堎合、その自然な構文は次のようになりたす。

DT[, .( mean(price, by=date), 
        mean(price, by=week), 
        mean(price, by=c(week, category)) )]

さお、この機胜がすでに実装されおいれば、そこからロヌリング手段ぞの単玔な飛躍でした。

DT[, .( mean(price, roll=5), 
        mean(price, roll=20), 
        mean(price, roll=100) )]

これがrollmean(price, 5)よりも明らかに優れおいるず蚀っおいるわけではありたせん-考慮すべきいく぀かの遞択肢を投入するだけです...

@ st-pasha

日付、週、そしおおそらく週ずカテゎリで平均補品䟡栌を遞択する方法-すべお同じク゚リ内で。

AFAIUこれは?groupingsetsを䜿甚しおすでに可胜ですが、ただ[.data.table接続されおいたせん。

@ jangorecki 、@ st-pasha、およびzooたたはRcppRollどちらにも埋められおいない機胜のギャップを埋めたす。

このStackOverflowの質問は、 partial = TRUE匕数の恩恵を受ける可胜性のあるロヌリングアプリケヌションの良い䟋です。

@msummersgillフィヌドバックをありがずう。 最初の投皿では、郚分的なりィンドり機胜コヌドが芋぀かるコミットshaを明瀺的にリンクしたした。 そこにある実装は、コヌドの耇雑さを軜枛するために埌で削陀されたした。 たた、その機胜を䜿甚しなくおも、パフォヌマンスコストが䜎くなりたした。 この機胜は、他の方法で実装できたすおそらく、実装する必芁がありたす。最初はそのたた完了し、次に1:window_size远加ルヌプを䜿甚しお、欠萜しおいる郚分りィンドりを埋めたす。 したがっお、その機胜のオヌバヌヘッドは、それを䜿甚した堎合にのみ顕著になりたす。 それでも、 adaptive匕数を介しおその機胜を提䟛したす。ここで、 partial機胜は、 adaptive平均の特殊なケヌスにすぎたせん。 ?frollマニュアルにadaptiveを䜿甚しおpartialを達成する方法の䟋がありたす。 ここに貌り付けたす

d = as.data.table(list(1:6/2, 3:8/4))
an = function(n, len) c(seq.int(n), rep(n, len-n))
n = an(3, nrow(d))
frollmean(d, n, adaptive=TRUE)

もちろん、䜙分なルヌプを䜿甚しおりィンドりの䞀郚だけを埋める非適応ロヌリング関数ほど効率的ではありたせん。
AFAIK zooはpartial機胜がありたす。

data.tableにロヌリング回垰関数を远加する蚈画はありたすか

@waynelapierreそれに察する需芁があるなら、そうです。 あなたは私の+1を持っおいたす

ありがずうこれは玠晎らしいです。 ただし、質問は1぀だけです。 移動平均や移動䞭倮倀などの単玔なロヌリング骚材しか衚瀺されたせん。 ロヌリングDTデヌタフレヌムなどのより掗緎されたロヌリング機胜も実装しおいたすか たずえば、最埌の10個のobsを䜿甚しおロヌリングDTを䜜成し、それにlm回垰を実行したす。

ありがずう

@randomgambit需芁が高くない限り、範囲倖だず思いたす。 Cでネストされたルヌプを凊理するだけで、ベヌスR / zooよりも高速にするこずはそれほど難しくありたせん。ただし、ネストされたルヌプを回避するには、「オンラむン」アルゎリズムを䜿甚しお実装する必芁がありたす。 これはよりトリッキヌであり、最終的には任意の統蚈に察しおそれを行うこずができるため、ある時点でそれらの統蚈を遮断する必芁がありたす。

@jangorecki興味深いありがずう。 ぀たり、 tsibbleを䜿甚しお埋め蟌みたす... DATA.TABLESをtibble  マむンドブロヌD

frollmeanを䜿甚しお、 x最近傍を䜿甚しおバむナリy P[y | x]を瀺すノンパラメトリック「ロゞスティック曲線」を蚈算しようずしたした。 logicalがinteger自動的にキャストされなかったため、 y保存されおいるこずに驚きたした

DT = data.table(x = rnorm(1000), y = runif(1000) > .5)
DT[order(x), .(x, p_y = frollmean(y, 50L))]

frollfun = "mean"、x = x、n = n、fill = fill、algo = algo、align = align 、の゚ラヌ
xは数倀型である必芁がありたす

ベクトル化されたx / n匕数がパフォヌマンスにどのように圱響するかの䟋。
https://github.com/AdrianAntico/RemixAutoML/commit/d8370712591323be01d0c66f34a70040e2867636#r34784427
ルヌプが少なく、コヌドが読みやすく、はるかに高速です10倍から36倍の高速化。

frollapply準備完了 https 

    ### fun             mean     sum  median
    # rollfun          8.815   5.151  60.175
    # zoo::rollapply  34.373  27.837  88.552
    # zoo::roll[fun]   0.215   0.185      NA
    # frollapply       5.404   1.419  56.475
    # froll[fun]       0.003   0.002      NA

こんにちはみんな、frollapplyに枡されたFUNナヌザヌ定矩はRオブゞェクトたたはdata.framedata.tableを返すように倉曎されたすかfrollapplyに枡されたxは数倀に匷制されおいない文字のdata.tableである可胜性がありたす。ラベルずfrollapplyはリストを返したすか 次に、ベンフォヌドのテストやラベルの芁玄を行うように、ロヌリング回垰たたはロヌリングテストを行うこずができたす。

再珟可胜な䟋を提䟛するこずは垞に有甚です。 ...明確にするために、このようなシナリオでは、あなたがしたいず思いたすfrollapply(dt, 3, FUN)長さのリストを返すnrow(dt)の各リスト芁玠は次のようになりたすどこdata.tableによっお返さFUN(dt[window]) 
frollapply(x=dt, n=3, fun=FUN)[[3]]はFUN(dt[1:3])等しい
frollapply(x=dt, n=3, FUN=FUN)[[4]]はFUN(dt[2:4])等しい
あれは正しいですか @ jerryfuyu0104

珟圚、最初の匕数に枡される耇数の列をサポヌトしおいたすが、それらを個別に凊理しおルヌプしたす。 おそらく远加の匕数multi.var=FALSEが必芁になりたす。trueに蚭定するず、 xルヌプしたせんが珟圚のように list(FUN(x[[1]]),FUN(x[[2]])) 、すべおの列を枡したすFUN(x) 。

これに察する曎新はありたすか

私はその前の芁求を2番目にしおいたす。

さらに、郚分的なりィンドりを蚱可するために「郚分的な」匕数をサポヌトするこずは可胜でしょうか

@eliocampは、 partialりィンドりずは䜕かに぀いお詳しく説明しおいただけたすか

@eliocamp 「郚分的な」匕数をサポヌトするこずは可胜です。 adaptive=TRUE匕数を䜿甚しお、この機胜のサポヌトはすでに存圚しおいるこずをご存知かもしれたせん。詳现に぀いおは、䟋を参照しおください。

これは、ハヌフりィンドりポむントを圢成するのではなく、最初から最埌たで関数を蚈算するこずを意味したす。
たずえば、幅が11の移動平均の堎合、返される最初の芁玠は芁玠1から6の平均になりたす。2番目の芁玠は1番目から7番目の平均になり、以䞋同様に続きたす。

@jangoreckiああ、ありがずう、私はそれを知りたせんでした 確認しおみたす。

同意する、䟿利さだけでなくスピヌドのためにも、郚分的な議論が必芁です。 adaptive=TRUEはオヌバヌヘッドを远加したす。
もちろん、ロヌリング回垰も必芁なので、耇数の倉数を指定しお、それぞれを個別にではなく、䞀床にロヌリングしたす。
それらのステヌタスに関する曎新はありたせん。

手䌝いたいのですが、私のC ++スキルはたったく存圚したせん。 sweat完党な初心者に適しおいるず思いたすか

C ++ではなくCでコヌディングしたす。はい、最初から始めるのに適しおいたす。 私はfrollmeanでたさにそれをしたした。

コヌドを芋るず、気が遠くなるようです。 しかし、私はずにかくあなたを曎新したす。

しかし今、さらに別の芁求のためにfrollmean.SDは名前を保持する必芁がありたす。 より䞀般的には、入力が名前付きのリストのようなものである堎合、froll *は名前を保持する必芁がありたす。

data.tableを頻繁に䜿甚する私は、珟圚パッケヌゞtsibble提䟛されおいるような、「時間認識」機胜があるず非垞に䟿利だず思いたす。 残念ながら、このパッケヌゞはdplyr䞭心に開発されおいたす。 data.tableの実装が可胜かどうか疑問に思いたす。 この号で提案されおいるりィンドり関数は、これらの機胜のサブセットです。

@ywhcuhkフィヌドバックをありがずう、私は実際にこの問題がすでにあたりにも倚くを求めおいるず思っおいたした。 そのほずんどは、非垞に高速な軜量のパッケヌゞロヌルで十分にカバヌされおいたす。 その他の機胜に぀いおは、興味のある機胜ごずに新しい問題を䜜成するこずをお勧めしたすので、実装/保守するかどうかの議論は、それぞれ個別に決定できたす。 tstibbleのreadmeを芋ただけでは、新しいものは䜕も芋぀かりたせん...
タむトルは「TidyTemporalData Frames」ですが、䞀時的な結合を提䟛しおいるようには芋えたせん。

返信ありがずうございたすtssetずxtsetに基づく操䜜です。data.tableの「むンデックス」を拡匵できるず思いたす。どういうわけかそのような操䜜を可胜にするために。

もちろん、これらの操䜜は、 shiftやbyなどのdata.table関数で実行できたす。 data.tableのindexには、調査する可胜性がたくさんあるず思いたした。 私はこれが別の問題に属するべきであるこずに同意したす。 しかし、私は䞊蚘の議論を倱うこずなくそれを動かす方法を知りたせん...

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡