Friday 20 October 2017

Dd Beweglicher Durchschnitt


Wann immer ich etwas machen will, muss ich in der Anwendersfamilie eine Funktion nutzen. (Side-Frage: Ich habe immer noch havent gelernt plyr oder umgestalten - würde plyr oder umgestalten ersetzen alle diese ganz) Allerdings habe ich nie ganz verstanden, die Unterschiede zwischen ihnen, wie die Funktion auf die Eingabegruppe eingegeben, wie die Ausgabe aussehen wird, oder Auch was der Eingang sein kann, also gehe ich oft nur durch sie alle, bis ich bekomme, was ich will Kann jemand erklären, wie man das benutzt, wenn mein aktuelles (vermutlich falsches) Verständnis ist. Sapply (vec, f). Input ist ein vektor. Ausgabe ist eine Vektormatrix, wobei das Element i f (veci) ist, das dir eine Matrix gibt, wenn f eine Multielementausgabe lapply hat (vec, f). Selben wie sapply Aber Ausgabe ist eine Liste (Matrix, 12, f). Input ist eine matrix Ausgabe ist ein Vektor, wobei das Element i f (rowcol i der Matrix) tapply ist (Vektor, Gruppierung, f). Ausgabe ist ein Matrixarray, wobei ein Element im Matrixarray der Wert von f bei einer Gruppierung g des Vektors ist und g auf die Zeilenkennamen durch (dataframe, gruppierung, f) gedrückt wird. Lass g eine Gruppierung sein. Gelten für jede Spalte der groupdataframe. Hübsche Darstellung der Gruppierung und der Wert von f an jeder Spalte. Aggregieren (Matrix, Gruppierung, f). Ähnlich wie bei Aber statt hübsches Drucken der Ausgabe, aggregiert alles in ein Dataframe. Gefragt am 17. August 10 um 18:31 R hat viele Anwen - dungsfunktionen, die in den Hilfedateien (z. B. zutreffend) beschrieben sind. Es gibt genug von ihnen, aber der Anfang useRs kann Schwierigkeiten haben zu entscheiden, welche für ihre Situation geeignet ist oder sogar daran erinnern sie alle. Sie können ein allgemeines Gefühl haben, dass ich hier eine Bewerbungsfunktion verwenden sollte, aber es kann schwierig sein, sie alle gleich zu halten. Trotz der Tatsache (in anderen Antworten erwähnt), dass ein Großteil der Funktionalität der anwendungsfamilie von dem äußerst beliebten plyr-Paket abgedeckt ist, bleiben die Basisfunktionen nützlich und wissenswert. Diese Antwort soll als eine Art Wegweiser für neue useRs dienen, um ihnen zu helfen, sie auf die richtige Anwendung Funktion für ihr besonderes Problem zu lenken. Beachten Sie, dass dies nicht beabsichtigt ist, die R-Dokumentation einfach aufzurüsten oder zu ersetzen. Die Hoffnung ist, dass diese Antwort Ihnen hilft, zu entscheiden, welche Anwendungsfunktion Ihrer Situation entspricht und dann ist es an Ihnen, sie weiter zu erforschen. Mit einer Ausnahme werden Leistungsunterschiede nicht angesprochen. Anwenden - Wenn du eine Funktion auf die Zeilen oder Spalten einer Matrix (und höherdimensionalen Analoga) anwenden möchtest, die im Allgemeinen nicht für Datenrahmen geeignet ist, wie sie zuerst zu einer Matrix führen wird. Wenn Sie wollen, dass Sammelsäule bedeutet oder Summen für eine 2D-Matrix, achten Sie darauf, die hoch optimierten, blitzschnellen colMeans zu untersuchen. RowMeans Colsums RowSums. Lapply - Wenn Sie eine Funktion auf jedes Element einer Liste nacheinander anwenden möchten und eine Liste zurück erhalten. Dies ist das Arbeitspferd vieler anderer Anwendungsfunktionen. Schäme deinen Code zurück und du wirst oft lapply finden. Sapply - Wenn Sie eine Funktion auf jedes Element einer Liste nacheinander anwenden möchten, aber Sie wollen einen Vektor zurück, anstatt eine Liste. Wenn du dich selbst schreibst (lapply (.)). Stoppen und betrachten sapply In fortgeschrittenen Verwendungen von sapply wird es versuchen, das Ergebnis zu einem mehrdimensionalen Array zu zwingen, wenn angemessen. Zum Beispiel, wenn unsere Funktion Vektoren der gleichen Länge zurückgibt, werden sie als Spalten einer Matrix verwendet: Wenn unsere Funktion eine zweidimensionale Matrix zurückgibt, wird Sapply im Wesentlichen dieselbe Sache machen und jede zurückgegebene Matrix als einen einzigen langen Vektor behandeln: Sofern wir nicht vereinfachen Array. In diesem Fall wird es die einzelnen Matrizen verwenden, um ein mehrdimensionales Array zu bauen: Jedes dieser Verhaltensweisen ist natürlich abhängig von unserer Funktion, die Vektoren oder Matrizen derselben Länge oder Dimension zurückgibt. Vapply - Wenn du sapply verwenden willst, musst du vielleicht noch mehr Geschwindigkeit aus deinem Code herausdrücken. Für vapply Sie geben im Grunde R ein Beispiel dafür, welche Art von Ding Ihre Funktion zurückkehren wird, die etwas Zeit sparen kann, um zurückgegebene Werte zu liefern, um in einen einzigen atomaren Vektor zu passen. Mapply - Wenn du mehrere Datenstrukturen hast (z. B. Vektoren, Listen), und du willst eine Funktion auf die ersten Elemente von jedem und dann die 2. Elemente von jedem, etc., die das Ergebnis zu einem Vektorarray wie in sapply. Dies ist multivariat in dem Sinne, dass Ihre Funktion mehrere Argumente akzeptieren muss. Karte - Ein Wrapper, um mit SIMPLIFY FALSE zu verknüpfen. So ist es garantiert, eine Liste zurückzugeben. Rapply - Für wann möchten Sie eine Funktion auf jedes Element einer verschachtelten Listenstruktur anwenden, rekursiv. Um Ihnen eine Vorstellung davon zu geben, wie ungewöhnlich rapply ist, habe ich es vergessen, wenn ich diese Antwort zuerst veröffentlichen. Offensichtlich bin ich sicher, dass viele Leute es benutzen, aber YMMV. Rapply wird am besten mit einer benutzerdefinierten Funktion dargestellt, um anzuwenden: tapply - Denn wenn du eine Funktion auf Teilmengen eines Vektors anwenden willst und die Teilmengen durch einen anderen Vektor definiert sind, ist in der Regel ein Faktor. Das schwarze Schaf der Anwendenfamilie, der Art. Die Hilfe-Dateien verwenden die Phrase ragged Array kann ein bisschen verwirrend sein. Aber es ist eigentlich ganz einfach Ein Faktor (von der gleichen Länge) definierende Gruppen: Addieren Sie die Werte in x innerhalb jeder Untergruppe, die durch y definiert ist: Es können komplexere Beispiele behandelt werden, wo die Untergruppen durch die eindeutigen Kombinationen einer Liste von mehreren Faktoren definiert sind. Tapply ähnelt im geheimen zu den Split-apply-combine-Funktionen, die in R üblich sind (Aggregat von ave. Ddply etc.). Daher ist der schwarze Schafstatus. Jsanders - das würde ich überhaupt nicht zustimmen. Data. frame s sind ein absolut zentraler Teil von R und als Listenobjekt werden häufig mit Lapply besonders manipuliert. Sie fungieren auch als Container für die Gruppierung von Vektorenfaktoren vieler Arten zusammen in einem traditionellen rechtwinkligen Datensatz. Während data. table und plyr eine bestimmte Art von Syntax hinzufügen könnten, die manche bequemer finden könnte, erweitern sie und handeln auf data. frame s. Ndash thelatemail Aug 20 14 at 6:08 Auf der Seite beachten Sie hier, wie die verschiedenen plyr-Funktionen den Basis-Applikations-Funktionen entsprechen (vom Intro zum plyr-Dokument von der plyr-Webseite hatte. co. nzlyr) Eines der Ziele von plyr Ist es, für jede der Funktionen konsistente Namenskonventionen bereitzustellen, die die Eingabe - und Ausgabedatentypen im Funktionsnamen codieren. Es liefert auch Konsistenz in der Ausgabe, in der Ausgabe von dlply () ist leicht passierbar zu ldply (), um nützliche Ausgabe zu produzieren usw. Konzeptionell ist das Lernen von Plyr nicht mehr schwierig als das Verständnis der Basis-Anwendungsfunktionen. Plyr und reshape Funktionen haben fast alle diese Funktionen in meinem täglichen Gebrauch ersetzt. Aber auch von der Intro zu Plyr Dokument: Zugehörige Funktionen tapply und Sweep haben keine entsprechende Funktion in plyr. Und nützlich bleiben Merge ist nützlich, um Zusammenfassungen mit den ursprünglichen Daten zu kombinieren. Erster Start mit Jorans ausgezeichnete Antwort - zweifelhaft alles kann besser das. Dann können die folgenden Mnemoniken helfen, sich an die Unterscheidungen zwischen jedem zu erinnern. Während einige offensichtlich sind, können andere weniger sein - für diese youll finden Sie Rechtfertigung in Jorans Diskussionen. Lapply ist eine Liste, die auf eine Liste oder einen Vektor wirkt und eine Liste zurückgibt. Sapply ist ein einfaches lapply (Funktion ist standardmäßig auf einen Vektor oder eine Matrix zurückzukehren) vapply ist ein verifizierter zutreffend (erlaubt, dass der zurückgebende Objekttyp vorgegeben wird) rapply ist ein rekursiver Antrag für verschachtelte Listen, dh Listen in Listen tapply ist ein Tagged gelten Wo die Tags identifizieren die Teilmengen gelten ist generisch. Wendet eine Funktion auf eine Matrix-Zeilen oder Spalten an (oder allgemeiner auf Dimensionen eines Arrays) Erstellen des richtigen Hintergrunds Wenn die Anwendung der Bewerbungsfamilie immer noch ein bisschen fremd für dich ist, dann könnte es sein, dass du einen wichtigen Standpunkt fehlt . Diese beiden Artikel können helfen. Sie bieten den notwendigen Hintergrund, um die funktionalen Programmierungstechniken zu motivieren, die von der anwendungsfamilie der Funktionen bereitgestellt werden. Benutzer von Lisp erkennen das Paradigma sofort. Wenn du nicht mit Lisp vertraut bist, sobald du deinen Kopf um FP bekommst, hast du einen mächtigen Blickwinkel für den Einsatz in R gewonnen - und es wird viel mehr Sinn machen. Antwortete Apr 25 14 at 0:20 Da ich erkannte, dass (die sehr ausgezeichnete) Antworten auf diese Post Mangel an durch und aggregierte Erklärungen. Hier ist mein Beitrag. Die nach Funktion, wie in der Dokumentation angegeben, kann aber als Wrapper für tapply sein. Die Macht der durch entsteht, wenn wir eine Aufgabe berechnen wollen, die tapply kann nicht handeln. Ein Beispiel ist dieser Code: Wenn wir diese beiden Objekte, ct und cb drucken. Wir haben im Wesentlichen die gleichen Ergebnisse und die einzigen Unterschiede liegen darin, wie sie dargestellt werden und die verschiedenen Klassenattribute jeweils für cb und array für ct. Wie ich schon sagte, die Macht von durch entsteht, wenn wir nicht verwenden können, ist der folgende Code ein Beispiel: R sagt, dass Argumente die gleichen Längen haben müssen, sagen wir, wir wollen die Zusammenfassung aller Variablen in Iris entlang des Faktors Spezies: aber R Kann das einfach nicht machen, weil es nicht weiß, wie man damit geht Mit der By-Funktion R eine bestimmte Methode für die Datenrahmenklasse abgeben und dann die Summenfunktion auch dann ausführen, wenn die Länge des ersten Arguments (und der Typ auch) unterschiedlich ist. Es funktioniert in der Tat und das Ergebnis ist sehr überraschend. Es ist ein Objekt der Klasse durch das entlang Arten (sagen, für jeden von ihnen) berechnet die Zusammenfassung jeder Variablen. Beachten Sie, dass, wenn das erste Argument ein Datenrahmen ist. Die ausgegebene Funktion muss eine Methode für diese Klasse von Objekten haben. Zum Beispiel verwenden wir diesen Code mit der mittleren Funktion, die wir diesen Code haben werden, der überhaupt keinen Sinn hat: Aggregat kann als eine andere andere Art der Verwendung gesehen werden, wenn wir es so verwenden. Die beiden unmittelbaren Unterschiede sind, dass das zweite Argument des Aggregats eine Liste sein muss, während tapply (nicht obligatorisch) eine Liste sein kann und dass die Ausgabe von aggregate ein Datenrahmen ist, während das eine von tapply ein Array ist. Die Kraft des Aggregats ist, dass es leicht Teilmengen der Daten mit Subset-Argument behandeln kann und dass es Methoden für ts-Objekte und Formel auch hat. Diese Elemente machen das Aggregat in einigen Situationen einfacher, mit diesem zu arbeiten. Hier sind einige Beispiele (in der Dokumentation verfügbar): Wir können das gleiche mit tapply erreichen, aber die Syntax ist etwas härter und die Ausgabe (unter Umständen) weniger lesbar: Es gibt andere Zeiten, in denen wir nicht verwenden können oder tapply und wir haben zu verwenden Aggregieren Wir können nicht das vorherige Ergebnis mit tapply in einem Aufruf erhalten, aber wir müssen den Mittelwert über den Monat für jedes Element berechnen und dann kombinieren (auch beachten Sie, dass wir die na. rm TRUE anrufen müssen, da die Formel Methoden der Aggregatfunktion hat Standardmäßig die na. action na. omit): während mit uns wir einfach nicht erreichen können, dass in der Tat der folgende Funktionsaufruf einen Fehler zurückgibt (aber höchstwahrscheinlich ist es mit der mitgelieferten Funktion verknüpft, bedeutet): Andere mal sind die Ergebnisse gleich Und die Unterschiede sind nur in der Klasse (und dann, wie es gezeigt wird, und nicht nur - Beispiel, wie man es unterteilt) Objekt: Der vorherige Code erreicht das gleiche Ziel und Ergebnisse, an einigen Punkten, welches Werkzeug zu verwenden ist nur eine Frage Von persönlichen Geschmäcken und Bedürfnissen der vorherigen zwei Objekte haben sehr unterschiedliche Bedürfnisse in Bezug auf die Teilung. Es gibt viele gute Antworten, die Unterschiede in den Anwendungsfällen für jede Funktion besprechen. Keiner der Antworten diskutiert die Leistungsunterschiede. Das ist vernünftiger Ursache, da verschiedene Funktionen verschiedene Inputs erwarten und verschiedene Outputs produzieren, doch die meisten von ihnen haben ein allgemeines gemeinsames Ziel, durch Seriesgroups zu bewerten. Meine Antwort wird sich auf die Leistung konzentrieren. Weil oberhalb der Eingabeerzeugung aus den Vektoren im Timing enthalten ist, wird auch die Applikationsfunktion nicht gemessen. Ich habe zwei verschiedene Funktionen Summe und Länge auf einmal getestet. Volumen getestet ist 50M am Eingang und 50K am Ausgang. Ich habe auch zwei derzeit beliebte Pakete, die nicht weit verbreitet waren, zu der Zeit, als Frage gefragt wurde, data. table und dplyr. Beide sind definitiv wert zu schauen, wenn Sie für eine gute Leistung streben. Beantwortet Dec 8 15 at 22:42 Ist es normal, dass dplyr ist niedriger als die applt Funktionen. Ndash Dimitri Petrenko Jun 8 16 at 9:35 DimitriPetrenko Ich glaube nicht, warum es hier ist. Es ist am besten, gegen deine eigenen Daten zu testen, da es viele Faktoren gibt, die ins Spiel kommen. Ndash jangorecki Jun 8 16 at 11:48 Es ist vielleicht erwähnenswert ave. Ave ist tapply s freundliche Cousine. Es gibt Ergebnisse in einer Form zurück, die Sie direkt in Ihren Datenrahmen stecken können. Es gibt nichts im Basispaket, das wie ave für ganze Datenrahmen funktioniert (wie von ist wie tapply für Datenrahmen). Aber du kannst es fälschen: antwortete am 6. November 14 um 0:00 Trotz all der großartigen Antworten hier gibt es noch 2 weitere Basisfunktionen, die es zu verdienen gilt, die nützliche äußere Funktion und die obskure eapply Funktion äußere ist eine sehr nützliche Funktion verborgen als Ein banalerer. Wenn Sie die Hilfe für äußere lesen ihre Beschreibung sagt: was macht es scheint, wie dies ist nur nützlich für lineare Algebra-Typ Dinge. Allerdings kann es viel wie mapply verwendet werden, um eine Funktion auf zwei Vektoren von Eingaben anzuwenden. Der Unterschied ist, dass mapply die Funktion auf die ersten beiden Elemente und dann die zweiten zwei usw. anwenden wird, während äußere die Funktion auf jede Kombination eines Elements aus dem ersten Vektor und einer von der zweiten anwendet. Zum Beispiel habe ich das persönlich benutzt, wenn ich einen Vektor von Werten und einen Vektor von Bedingungen habe und wünsche, welche Werte welche Bedingungen erfüllen. Eapply ist wie lapply außer dass anstatt eine Funktion auf jedes Element in einer Liste anzuwenden, es wendet eine Funktion auf jedes Element in einer Umgebung an. Zum Beispiel, wenn Sie eine Liste von benutzerdefinierten Funktionen in der globalen Umgebung finden wollen: Ehrlich gesagt, ich benutze nicht sehr viel, aber wenn Sie eine Menge von Paketen oder erstellen Sie eine Menge von Umgebungen kann es praktisch kommen. Antwortete 16. Mai 16 um 3:59 Uhr

No comments:

Post a Comment