Data.table: Vignetten

Erstellt am 11. Nov. 2014  ·  54Kommentare  ·  Quelle: Rdatatable/data.table

HTML-Vignettenserie:

Geplant für v1.9.8

  • [ ] Kurzer Überblick über data.table
  • [x] [Schlüssel und schnelle binäre Suche basierende Teilmenge](https://rawgit.com/wiki/Rdatatable/data.table/vignettes/datatable-keys-fast-subset.html)
  • [x] [Sekundäre Indizes und automatische Indizierung](https://rawgit.com/wiki/Rdatatable/data.table/vignettes/datatable-secondary-indices-and-auto-indexing.html)
  • [ ] Schließt sich der Vignette an . a) _joins_ vs _subsets_ -- Erweiterung der binären suchbasierten Teilmenge auf Joins + bedingte / nicht-gleiche Joins, Rolling- und Intervall-Joins. b) by=.EACHI, Join + Update-Funktion. c) Dokumentieren Sie die Verwendung von i.col wie in #1038 abgelegt. d) Behandeln Sie auch Leistung/Vorteile aus Nr. 1232.
  • [ ] Deckt get() und mget() .
  • [ ] Fügen Sie die Argumentation über on= in den FAQ hinzu (#1623).
  • [ ] FAQ 5.3 muss erwähnen, dass es sich um eine _flache_ Kopie handelt, die erstellt wird, um die Überbelegung wiederherzustellen. Danke an Jan für die Verlinkung in #1729.

Zukünftige Veröffentlichungen

  • [ ] data.table-Interna, Leistungsaspekte und _Ausdrucksstärke_
  • [ ] Lesen mehrerer Dateien ( fread + rbindlist ), Ordnen, Rangieren und Set-Operationen
  • [ ] IDateTime-Vignette
  • [ ] Dokumentieren Sie den Unterschied zwischen data.table() und data.frame() irgendwo - relevante Probleme: #968, #877. Vielleicht etwas ausführlicher in den FAQ.
  • [ ] FAQ zu Kursen
  • [ ] Erweiterte data.table Nutzung:

    • [ ] NSE

    • [ ] ...

  • [ ] Timings-Vignette (#520 hierher verschieben, um alles an einem Ort zu bekommen, aber nicht sicher, ob wir sie als Vignette brauchen, da wir das Wiki mit Benchmarks/Timings haben).
  • [ ] fread+fwrite Vignette, enthält auch die Komfortfunktionen des Fread- Wikis, auch https://github.com/Rdatatable/data.table/issues/2855

Fertig:

  • [x] [Einführung in data.table](https://rawgit.com/wiki/Rdatatable/data.table/vignettes/datatable-intro-vignette.html) - data.table-Syntax, allgemeine Form, Teilmengenzeilen in i , wähle / mache in j und Aggregationen mit by .
  • [x] [Referenzsemantik](https://rawgit.com/wiki/Rdatatable/data.table/vignettes/datatable-reference-semantics.html) (_add/update/delete_ Spalten als Referenz, und sehen, dass wir kombinieren können mit i und by wie zuvor)
  • [x] [Effizientes Reshaping mit data.tables](https://rawgit.com/wiki/Rdatatable/data.table/vignetten/datatable-reshape.html)
  • [x] Link zu dieser Antwort auf SO auf by=.EACHI bis die Vignette fertig ist.

Unerheblich:

  • [ ] Operationen mit integer64 und Heraufstufen für _große ganze Zahlen_.

Anmerkungen (um aktuelle Vignetten basierend auf Rückmeldungen zu aktualisieren): Bitte lassen Sie mich wissen, wenn ich etwas verpasst habe.

Einführung in data.table:

  • [x] order in i .
  • [x] Erklären Sie, wie Sie beim Auswählen/Berechnen Spalten in j benennen.
  • [x] Betonen Sie, dass _keyby_ angewendet wird, _nachdem_ das Ergebnis auf das berechnete Ergebnis bezogen wird, nicht auf die ursprüngliche data.table.
  • [x] Erwähnen Sie neue Updates für .SDcols und Spalten in with=FALSE , die Spalten als colA:colB auswählen können.

    Referenzsemantik:

  • [ ] Erkläre hier auch alle anderen relevanten set* Funktionen.. ( setnames , setcolorder etc..)

  • [ ] Hauptsächlich set .
  • [x] Erklären Sie, dass 1b) the := operator nur die Verwendungsmöglichkeiten definiert – das Beispiel dort funktioniert nicht, da es nur zwei verschiedene Verwendungsweisen zeigt – Folgen Sie diesem Kommentar .

    Schlüssel und auf der schnellen binären Suche basierende Teilmengen:

  • [ ] Fügen Sie ein Beispiel für eine Teilmenge mit Integer-/Doppelschlüsseln hinzu.

  • [ ] Unterschied in der Standardeinstellung "nomatch" in binären suchbasierten Teilmengen.
  • [ ] Ersetzen von NAs durch binäre suchbasierte Teilmengen möglich?

    FAQ (am besten hier, denke ich).

  • [x] Aktualisieren Sie die FAQ mit dem Problem, dass der externe Zeiger NULL ist, wenn ein R-Objekt aus einer Datei gelesen wird, beispielsweise mit readRDS() . Aktualisieren Sie diesen SO-Beitrag .

  • [ ] Erklären Sie anhand eines Beispiels, wie die data.table mit alloc.col() überbelegt wird und wann sie verwendet wird (wenn Sie mehrere Spalten erstellen müssen) und warum. Aktualisieren Sie diesen SO-Beitrag .
documentation internals

Alle 54 Kommentare

fread ist am wenigsten erwähnenswert.
Die obigen Punkte beziehen sich hauptsächlich auf die Datentransformation, fread ist eher eine Datenextraktion, so dass sie in einer solchen Vignette möglicherweise übersprungen wird, aber IMO ist es wert, solche data.table Fähigkeiten zu erwähnen.

edit: Welches wirst du verwenden: Rnw oder Rmd?

Einverstanden und aktualisiert.

Ich bin gespannt, was eine Erkältung schneller macht, als tapply sagen. Ein Teil der Antwort ist gforce, aber was ist mit von Benutzern geschriebenen Funktionen? Ich konnte dazu nichts finden. Es gibt einen netten Beitrag über Panda: http://wesmckinney.com/blog/?p=489
Man könnte es sogar mit sapply . Angenommen, ich beginne mit einer Liste von Vektoren. Lohnt es sich jemals, alle Vektoren in einer Spalte in einer data.table anzuhängen und by anstelle von sapply ?

@matthieugomez interessante Frage! Wäre schön das auch abzudecken. Kommt weiter :-).

Ich würde gerne mehr über IDateTime und einige der Anwendungsfälle dafür erfahren.

@gsee aktualisiert.

Da ich neu in R und data.table bin (seit März), würde ich sagen, dass es eine grundlegende ergebnisorientierte Einführung im Gegensatz zur aktuellen funktionsorientierten Einführung geben muss. Mit anderen Worten, es ist eine Sache zu lesen, was die einzelnen Parameter in data.table tun, aber sie machen oft wenig Sinn, ohne einen Anwendungsfall im Auge zu haben. Es gibt zwar Beispiele für den Output, aber viele Leute müssen in die andere Richtung gehen. Das heißt, sie wissen, welche Ausgabe sie benötigen, wissen jedoch nicht, welche Funktion/Parameter/Einstellung am besten geeignet ist. Es wäre hilfreich, einen einfachen Rezeptansatz zu haben, um sie zu starten.

Wie erstelle ich Teilmengen meiner Daten?
Wie führe ich eine Operation für Teilmengen meiner Daten aus, um einen neuen oder aktualisierten Datensatz zu erstellen?
Wie füge ich eine neue Spalte hinzu?
Wie lösche ich eine Spalte?
Wie erstelle ich eine einzelne Variable?
Wie erstelle ich mehrere Variablen?
Wie führe ich verschiedene Operationen an verschiedenen Teilmengen meiner Daten durch? (.VON)
Wie verwende ich data.table in einer Funktion und übergebe data.table-Namen und -Spalten, mit denen gearbeitet werden soll?
Wie führe ich mehrere sequentielle Operationen auf derselben data.table durch?
Kann ich eine Teilmenge von Daten auswählen und gleichzeitig eine Operation darauf ausführen?
Wann muss ich beim Erstellen/Aktualisieren von Variablen durch Verweis vorsichtig sein?
Wie wähle ich eine Beobachtung pro Gruppe aus (erste, letzte)?
Wie lege ich einen Schlüssel fest und wie unterscheidet er sich vom Festlegen eines Indexes?
Unter welchen Bedingungen wird mein Schlüssel gelöscht, wenn ich eine Operation auf meiner data.table durchführe?
Kann ich einfach die normale "Merge"-Syntax verwenden oder muss ich die data.table-Syntax (Y[X]) verwenden?
Wie komprimiere ich eine Liste von Listen in eine Big Data.table? Was ist, wenn die Spalten in unterschiedlicher Reihenfolge sind?

Es gibt wahrscheinlich eine Menge anderer Elemente auf SO, die zu einer einfachen Zusammenstellung von Fragen und Antworten bearbeitet werden könnten.

@markdanese Danke für deine Vorschläge. Diese sind alle großartig zu haben, aber wahrscheinlich als separates Wiki, da sie bestimmte Aufgaben sehr genau behandeln. Ziel der Vignette ist eine Einführung in die data.table-Syntax, die zeigt, wie flexibel und leistungsstark sie sein kann, damit Sie diese Aufgaben selbst erledigen können.

Ich schreibe jetzt die Vignetten (so schnell ich kann), und das Format ist mehr oder weniger so (Q&A) und erkläre die Antwort mit einem Beispiel. Sobald ich die erste Vignette poliert habe, beabsichtige ich, sie hier zu posten, um Feedback zu erhalten. Es wäre großartig, auch Ihre Meinung zu wissen.

Danke noch einmal.

Weitere Erweiterung der Idee der Wiki-Seite: Die Links zu FAQ und Code Fragments (Advanced) auf http://www.ats.ucla.edu/stat/r/ könnten eine nützliche Ressource sein, um traditionelle Aufgaben in R mit Daten zu vergleichen .Tabelle Weg. Ich habe so etwas in einem Blogbeitrag (http://vijaylulla.com/wp/2014/11/12/grouping-in-r-using-data-table/) gemacht, um es meinem Kollegen zu zeigen. Sorry für die schamlose Eigenwerbung.

Ich habe die _Einführung in die data.table_-Vignette beendet (siehe Link oben). Es wäre toll zu wissen, was Sie denken.

Danke an @jangorecki und @brodieG für tolle Feedbacks und natürlich @mattdowle :-).

Das ist wirklich toll. Ich wünschte, es existierte vor einem Jahr, als ich anfing, data.table zu verwenden. Ein paar kleine Dinge unten für Ihre Überlegung:
Vielleicht möchten Sie erwähnen, dass Sie in Ihrer Zusammenfassung am Ende (via order ) in i sortieren können. Das können Sie auch gleich zu Beginn erwähnen. Sie könnten auch erwähnen, dass es komplexere Joins gibt, die in i mit nicht abgedeckten Schlüsseln durchgeführt werden können. Dadurch können Sie die Hauptfunktionen von i erwähnen, damit der Leser bei Bedarf nach fortgeschritteneren Funktionen suchen kann. Und Sie können später mit Hyperlinks darauf verweisen.

Im .SD-Abschnitt schreiben Sie "diese Gruppe", aber es könnte klarer sein, "diese Gruppe, die mit by ". Dies geschieht auch etwas später.

Ich habe es vielleicht übersehen, aber es wäre gut, etwas klarer zu sein, dass .SD mit by die Daten im Wesentlichen auf die .SD-Spalten beschränkt und dann einen Satz von data.tables für . erstellt jede eindeutige Kombination der Variablen in by . Anschließend verarbeitet es diese data.tables in der Reihenfolge der by Variablen unter Verwendung der Funktion(en) von j . Sie könnten sogar erwähnen, dass es spezielle Symbole gibt, die es Benutzern ermöglichen, auf einige der im Rahmen dieser Verarbeitung generierten Indizes zuzugreifen, die jedoch den Rahmen der Einführungsvignette sprengen würden.

Auch dies sind nur Vorschläge. Ihre harte Arbeit (und die von Matt) wird sehr geschätzt.

Am Samstag, 17. Januar 2015 um 18:22 Uhr, Mark Danese [email protected]
schrieb:

Das ist wirklich toll. Ich wünschte, es existierte vor einem Jahr, als ich anfing zu benutzen
Datentabelle. Ein paar kleine Dinge unten für Ihre Überlegung:

Dankeschön.

Vielleicht möchten Sie erwähnen, dass Sie (über Bestellung) in i in Ihrem sortieren können
Zusammenfassung am Ende. Das können Sie auch gleich zu Beginn erwähnen.

Oh verdammt! Toller Punkt. Ich sollte ganz am Anfang "order(..)" hinzufügen, und
wird auch zur Zusammenfassung hinzugefügt.

Sie könnten auch erwähnen, dass es komplexere Joins gibt, die möglich sind
done in i mit nicht abgedeckten Schlüsseln. Das erlaubt Ihnen zu erwähnen
die Hauptfunktionen von i, damit der Leser nach fortgeschritteneren suchen kann
Funktionen, wenn sie sie brauchen.

Stimmt, geht.

Und Sie können später mit Hyperlinks darauf verweisen.

Das bin ich mir nicht sicher
im WIKI..

Im .SD-Abschnitt schreibst du "diese Gruppe", aber es könnte klarer sein, dass
sagen Sie "diese Gruppe, die mit von definiert wurde". Dies geschieht auch etwas später als
Gut.

Ich dachte, ich hätte es zu "der aktuellen Gruppe" herausgeschnitten, aber anscheinend nicht.. "von
die aktuelle Gruppe, definiert mit in by " - wie klingt das?

Ich habe es vielleicht übersehen, aber es wäre gut, etwas klarer zu sein
dass .SD mit im Wesentlichen die Daten auf die .SD-Spalten beschränkt und dann
erstellt einen Satz von Datentabellen für jede eindeutige Kombination der Variablen
im bei. Es verarbeitet dann diese data.tables in der Reihenfolge der by
Variablen, die die Funktion(en) aus j verwenden.

Ich glaube, du hast es verpasst. Es befindet sich direkt unter dem Blockzitat, wo .SD ist
erläutert (in Abschnitt 2e). Und es erklärt genau, was du hier erwähnst...

Sie könnten sogar erwähnen, dass es spezielle Symbole gibt, die es Benutzern ermöglichen,
auf einige der im Rahmen dieser Verarbeitung generierten Indizes zugreifen, aber das
diese gehen über den Rahmen der Einführungsvignette hinaus.

Richtig.. das ist der Grund, keine weiteren Sonderzeichen einzuführen.

Auch dies sind nur Vorschläge. Deine harte Arbeit (und die von Matt) ist großartig
hochgeschätzt.

Tolle Vorschläge. Ich schreibe zurück, sobald ich die anderen Vignetten hochgeladen habe.


Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/Rdatatable/data.table/issues/944#issuecomment -70375167
.

Das bin ich mir nicht sicher
im WIKI..

AFAIK Wenn Sie ein Paket an CRAN senden, das Rmd im Verzeichnis vignettes , werden sie automatisch erstellt, um zu überprüfen, ob die Erstellung der Vignette erfolgreich ist. Der Quellcode in CRAN enthält jedoch bereits erstellte Vignetten (html). Sie, nicht der von CRAN build/check.
CRAN ist ein guter Ort für Vignetten, da es für viele Benutzer der erste Ort ist, um nach Dokumenten/Tutorials zu suchen, daher denke ich, dass es sich lohnt, sie in CRAN zu haben.

Und Sie können später mit Hyperlinks darauf verweisen.

Das bin ich mir nicht sicher.. da diese auf CRAN und auch auf das WIKI übertragen werden sollen..

Funktionieren einzelne Ordner-Links nicht auf CRAN? Ich habe dort eigentlich nichts hochgeladen, aber diese Vignette verknüpft mehrere andere im selben Ordner mithilfe relativer Links und funktioniert einwandfrei von R (offensichtlich stammt der Link nicht von R, aber wenn Sie das Paket installieren und die Vignetten ausführen, werden die Links angezeigt.) Arbeit.

Aktualisiert mit _Reference Semantics_ Vignette.

danke nochmal, dass du das alles gemacht hast.

nur ein weiterer Vorschlag zu etwas, das Sie auf einer Vignette abdecken können - die Verwendung von data.table in Ihrer eigenen Funktion. kein Paket schreiben, sondern nur versuchen, einige allgemeine Aufgaben zu automatisieren. Es gibt einige Tricks, die ich nicht ganz herausgefunden habe. Auch wenn es irgendwo einen Beitrag zu diesem Thema gibt, wäre ein Link dankbar.

Schließlich kann eine Vignette, die "nützliche" Stack-Overflow-Posts auflistet, für Themen hilfreich sein, die Sie nicht in eine Vignette aufnehmen möchten.

nur ein paar zufällige Gedanken.

Zwei Gedanken:

  • Link zu den Vignetten im Wiki
  • Fügen Sie in der Referenzsemantik-Vignette hinzu, wie := mit einem Listenausdruck in Anführungszeichen (oder nur einer Zuweisung in Anführungszeichen) verwendet wird. Vielleicht verdient dies eine eigene Vignette, da die NSE (Non-Standard-Evaluation) in data.table die interaktive Nutzung erleichtert, aber erfordert, dass Sie für die Verwendung von data.table in Ihrer eigenen Funktion oder Ihrem Paket jetzt etwas über Zitat, Bewertung, Ersatz und Freunde benötigen. Vielleicht einfach etwas wie dt[, do.call(:=", eval(my_quoted_list)] zur Vignette hinzufügen und dann eine Vignette zu NSE und ihren Auswirkungen erstellen?

Vielen Dank.

  1. Kennen Sie schon das ?
  2. Dies wird höchstwahrscheinlich in einer separaten Vignette behandelt. Aber noch keine Pläne.

@arunsrinivasan Nein, das hatte ich noch nicht gesehen, super! Noch ein Lesezeichen

Aktualisiert mit _Keys und schneller binärer Suche basierend auf Subset_ Vignette.

Sehr schön. Ich liebe diese Vignetten. Nur ein paar kurze Kommentare zur Überlegung.

Was ist der Zweck der Übernahme von Zeilennamen, wenn sie nicht verwendet werden? Oder werden sie von den speziellen Operatoren in j verwendet (wie .N, .I usw.)? Ich denke, sie werden von data.table verwendet, aber nicht als Indizes. Ich war immer verwirrt von dem Zweck, die nummerierten Zeilennamen zu erzwingen.

Warum unique im ersten Schlüssel verwenden, wenn nur auf den zweiten zugegriffen wird? Wenn Sie dies nicht tun, erhalten Sie viele wiederholte Zeilen in der Ausgabe, oder? Vielleicht offensichtlich, aber es könnte hilfreich sein, zu sagen/zu zeigen, was passiert, wenn Sie es nicht tun.

Müssen alle Schlüssel angegeben werden? Auch numerische (ganzzahlige)? Können Sie eine Zahl als Schlüssel verwenden? Gibt es Dinge, auf die Sie achten sollten?

Was ist, wenn Ihre Schlüsselspalte NA enthält? Können Sie diese suchen und ersetzen (wie in Ihrem Beispiel, in dem Sie 24 durch 0 ersetzt haben?

Es könnte hilfreich sein zu erklären, dass keyby für die _output_ data.table ( ans in Ihrem Beispiel) gilt und nicht für die Eingabe data.table ( flights in Ihrem Beispiel).

Können Sie einen Vektor an den Schlüssel übergeben? Mit anderen Worten, können Sie airport <- c("LGA", "JFK", "EWR") erstellen und airport direkt in i in Ihrem Beispiel unten verwenden? Dies könnte helfen, die Idee zu entwickeln, eine andere data.table für eine Zusammenführung zu übergeben.

Tippfehler bei "entsprechend" ("korrespondierend"). Einer der hinteren Häkchen fehlt im Vektorscan-Abschnitt, in dem Sie schreiben "Die Zeilenindizes, die Ursprung == "LGA" und Ziel == "TPA"` entsprechen, werden mit schlüsselbasierter Teilmenge erhalten."

@markdanese bezüglich der

Warum im ersten Schlüssel eindeutig verwenden, wenn nur auf den zweiten zugegriffen wird?

flights[.(unique(origin), "MIA")]

Ich bin mir nicht sicher, ob Sie sehr nach einer besseren Erklärung fragen oder sich der komplexeren Verwendung von Mehrspaltenschlüsseln nicht bewusst sind.
Sie können nicht einfach die binäre Suche für dest wenn Ihr Schlüssel c(origin, dest) , Sie sollten c(dest, origin) , um die binäre Suche für dest . Die Verwendung von .(unique(origin), "MIA") verwendet die binäre Suche, indem alle verfügbaren Werte für die erste Spalte im Schlüssel und dann selektive Werte für die zweite Spalte bereitgestellt werden.
Ich habe eine Erweiterung vorgenommen, um nur selektive Spalten aus dem Schlüssel zu verwenden. Wenn Sie sich das einfache Beispiel ansehen, können Sie es auch verstehen. Meine Erweiterung ist nicht bereit, PR für den data.table-Master zu sein, da die Speichernutzung nicht so gut skaliert, wie sie es könnte, wenn sie mit internen data.table-Funktionen entwickelt / mit dem data.table-Sekundärschlüssel kombiniert wird.

Können Sie eine Zahl als Schlüssel verwenden?

Sie können numerische als Schlüssel verwenden, es wird im Abschnitt Keys and their properties .

Gibt es Dinge, auf die Sie achten sollten?

Ich bin mir nicht sicher, aber setNumericRounding beeinflusst den numerischen Schlüssel, könnte in der Vignette erwähnenswert sein.

Was ist, wenn Ihre Schlüsselspalte NA enthält? Kannst du diese suchen und ersetzen?

Ja, is.na() ist für die binäre Suche optimiert. Versuchen Sie es mit data.table(a=c(1,NA_real_),b=c("a","b"),key="a")[.(NA_real_), .SD ,verbose=TRUE]

Auch an @arunsrinivasan , der Tippfehler in:

finde die passenden Werte in

Danke Jan - das ist wirklich hilfreich. Ich habe diese Fragen als Dinge angeboten, die in der Vignette kurz erwähnt werden könnten, um neuen Benutzern zu helfen, zu verstehen, was vor sich geht. Dies waren Dinge, die mir (als relativ neuer Benutzer) beim Lesen der Dokumentation in den Sinn kamen. Ich kann nicht wirklich zum Code beitragen, daher hoffe ich, einen Beitrag zu leisten, indem ich bei der Dokumentation helfe.

Am Freitag, 23. Januar 2015 um 20:48 Uhr, Mark Danese [email protected]
schrieb:

Sehr schön. Ich liebe diese Vignetten. Nur ein paar kurze Kommentare für
Rücksichtnahme.

Was ist der Zweck der Übernahme von Zeilennamen, wenn sie nicht verwendet werden? Oder sind
sie von den speziellen Operatoren in j verwendet (wie .N, .I usw.)? Ich denke sie
werden von data.table verwendet, aber nicht als Indizes. ich war schon immer
verwirrt durch den Zweck, die nummerierten Zeilennamen zu erzwingen.

Abschnitt 1a, direkt über Schlüssel und ihre Eigenschaften, hat darauf eine Antwort.
Data.tables _erben_ von data.frames.

Warum im ersten Schlüssel eindeutig verwenden, wenn nur auf den zweiten zugegriffen wird? wenn du
nicht, Sie erhalten viele wiederholte Zeilen in der Ausgabe, oder? Vielleicht offensichtlich,
aber es könnte hilfreich sein, zu sagen/zeigen, was passiert, wenn Sie es nicht tun.

Auch dies wird weiter unten in "Was passiert hier?" genau erklärt. ich
beziehen Sie sich sogar auf den vorherigen Abschnitt, in dem ich die Grundlage dafür lege
diese erklären.

Müssen alle Schlüssel angegeben werden? Auch numerische (ganzzahlige)? Kannst du a . verwenden
numerisch als Schlüssel? Gibt es Dinge, auf die Sie achten sollten?

Es gibt ein Beispiel mit ganzzahligen Spalten auf 2d. Ich dachte das wäre
ausreichend?

Was ist, wenn Ihre Schlüsselspalte NA enthält? Kannst du diese suchen und ersetzen?
(wie Sie es in Ihrem Beispiel getan haben, in dem Sie 24 durch 0 ersetzt haben?

Guter Punkt. Das ist ein Unterschied zum Vektorscan. Werde versuchen dies hinzuzufügen.

Es könnte hilfreich sein zu erklären, dass keyby für die _output_ data.table (
ans in Ihrem Beispiel) und nicht die Eingabe data.table (Flüge in Ihrem
Beispiel).

'keyby' wurde bereits in der ersten Vignette diskutiert. Aber ich werde sehen, ob das
Kann hinzugefügt werden.

Können Sie einen Vektor an den Schlüssel übergeben? Mit anderen Worten, können Sie einen Flughafen erstellen?
<- c("LGA", "JFK", "EWR")und useairportdirectly ini` in Ihrem Beispiel near
der untere? Dies könnte helfen, die Idee zu entwickeln, ein anderes zu übergeben
data.table für eine Zusammenführung.

Inhalt für den nächsten Abschnitt. So gehen wir in Joins über.

Tippfehler bei "entsprechend" ("korrespondierend"). Einer der hinteren Häkchen ist
fehlt im Vektorscan-Abschnitt, in dem Sie "Die Zeilenindizes" schreiben
entsprechend Herkunft == "LGA" unddest == "TPA"` werden mit Schlüssel erhalten
basierende Teilmenge."

Vielen Dank.


Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/Rdatatable/data.table/issues/944#issuecomment -71253738
.

Tolle Arbeit an diesen Vignetten!
Meine Kommentare sind möglicherweise verspätet oder bereits abgedeckt:

  • Ich würde gerne verschiedene Möglichkeiten / Beispiele für die Verwendung dynamischer Zeilen und Spalten sehen.
  • Ausführlicherer Vergleich zu Merge und Joins.
  • Verschiedene / reichhaltigere Möglichkeiten, set . Außerdem wäre es schön, eine Erklärung zu sehen, warum Folgendes einen Fehler ausgibt (siehe hier ):
for (j in  valCols)
   set(dt_,  
    i = which(is.na(dt_[[j]])),
    j = j, 
    value= as.numeric(originTable[[j]]))

Vignette umformen zum Wiki hinzugefügt .

Ausgezeichnete Funktionalität und Vignette! Danke Arun

Am Dienstag, 23. Juni 2015, 21:02 Uhr schrieb Arun [email protected] :

Vignette umformen hinzugefügt
https://rawgit.com/wiki/Rdatatable/data.table/vignettes/datatable-reshape.html
zum Wiki https://github.com/Rdatatable/data.table/wiki/Getting-started.


Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/Rdatatable/data.table/issues/944#issuecomment -114678716
.

Mann für patterns wäre gut. Tolle Vignette

Muss reshape2 nicht geladen werden, um diese Befehle zu verwenden? Wenn ja, dann sollte das erwähnt werden. Der Fokus auf "breit zu lang" und "lang zu breit" gefällt mir sehr gut. Ich hasse die Syntax von reshape2 absolut (zum Beispiel denke ich, dass "make_wide" viel klarer ist als "dcast"). Aus diesem Grund würde ich die Abschnittsüberschriften nicht als "melting data.tables" und "casting data.tables" schreiben. Das macht nur Sinn für Leute, die mit dem reshape2-Paket vertraut sind. Ich könnte mit Headern beginnen, die universeller sind als oben ("long to wide").

Für das, was es wert ist, kann ich die erste Zeile der Vignette nicht mit einer neuen R-Sitzung ausführen, in der nur data.table geladen ist. Ich habe keine Ahnung warum (vielleicht sollte der Modus "w" und nicht "wb" sein), aber
DT = fread("https://raw.githubusercontent.com/wiki/Rdatatable/data.table/data/melt_default.csv")
kehrt zurück
Error in download.file(input, tt, mode = "wb") : unsupported URL scheme

Wie immer, danke dafür. Es ist wirklich nützlich.

@markdanese danke für das

  1. reshape2 wird ab data.table v1.9.6 nicht benötigt. Dies wurde auch in der Vignette aktualisiert.
  2. "Breit zu lang" und "Lang zu breit" zu Titeln und anderen Stellen hinzugefügt, um Verwirrung bei Neulingen dieses Themas zu vermeiden.
  3. https Funktionalität in fread ist in der Entwicklerversion implementiert. Sie können diesen Code also noch nicht mit v1.9.4 ausführen. Entweder updaten oder ein bisschen warten :-).

Danke für deine Unterstützung.

@jangorecki patterns() wird nicht exportiert. Die Verwendung wird um [.data.table , um Spalten auszuwählen, := , .SDcols usw..

@arunsrinivasan immer noch das Handbuch für patterns kann helfen, genauso wie es eines für := . Nur weil viele Leute (glaube ich) ?fun benutzen, um den Code zu verstehen, den sie lesen.

In der _join_-Vignette kann es sich lohnen, entsprechende SQL-Beispiele für data.table-Joins hinzuzufügen, damit sie für db-Jungs einfacher zu finden sind.
Beispiele für entsprechende SQL-Anweisungen finden Sie beispielsweise in SO Wie werden Datenrahmen (inner, außen, links, rechts) verbunden (zusammengeführt)? .

Wäre auch cool, ein paar "Flüchtlings"-Vignetten zu haben --

  • data.table für Stata Benutzer
  • data.table für SQL Benutzer
  • data.table für Matlab Benutzer
  • data.table für Python / pandas Benutzer
  • sogar data.table für dplyr Benutzer

etc. Wie eine Kurzanleitung, aber auf Emigranten ausgerichtet.

Secondary indices and auto indexing Vignette hinzugefügt. Dies sollte einen reibungslosen Übergang von Teilmengen zu Verknüpfungen für die nächste Vignette ermöglichen, an der ich arbeite.

Ist @arunsrinivasan nicht besser geeignet, _sekundär_ nicht in Bezug auf _Indizes_ zu verwenden? es wurde für _keys_ verwendet, wo es wichtig war. Jetzt scheint es überflüssig zu sein, wenn wir auf _index_-Namensgebung umschalten.

@jangorecki Ich denke, "sekundär" ist nützlich für seine Beziehung zu Schlüsseln (primär), vielleicht:

Sekundärsortierung

Ist eine bessere Beschreibung?

aber schon das _index_ Wort wurde verwendet, es sieht schöner aus als _sekundäre Sortierung_ :)

Sie würden es also einfach "automatische Indizierung" nennen? IMO "sekundäre Sortierung und automatische Indizierung" fühlt sich informativer an

_auto_ kann irgendwie irreführend sein, da Indizes für die _auto_ Erstellung von Indizes und auch für die Verwendung von manuell erstellten Indizes funktionieren sollten - #1422 adressiert die aktuellen Einschränkungen in dieser Angelegenheit.

Ich verstehe. Mir fehlt immer noch Ihre bevorzugte Alternative - nur "Indizes"?

nicht perfekt, aber bevorzugt gegenüber _sekundären Indizes_

Ich mag diese neueste Vignette sehr. Mein einziger Gedanke war, dass es hilfreich sein könnte zu erwähnen, welche Arten von Operationen dazu führen, dass der Index gelöscht wird. Nach meinen Tests scheint es so ziemlich alles zu geben, was die Anzahl der Zeilen ändert, oder jede Operation, die die indizierte Spalte betrifft.

Ich dachte, die Beispiele von "on" waren wirklich hilfreich.

@markdanese guter Punkt, werde hinzufügen.

Vielen Dank für die aktualisierten Vignetten mit der Veröffentlichung von v1.9.8.
Die "Referenzsemantik" bezieht sich auf die Funktion copy() und ihre neuen Fähigkeiten zum Erstellen flacher Kopien (insbesondere innerhalb von Funktionen, was mich wirklich interessiert):

"Allerdings könnten wir diese Funktionalität durch flaches Kopieren anstelle von tiefem Kopieren weiter verbessern. Tatsächlich würden wir diese Funktionalität sehr gerne

Aber die Designvignette fehlt und der Link weist auf ein altes Problem hin. Das Referenzhandbuch enthält keine weiteren Informationen zu copy() als die in der Vignette. Die restlichen Vignetten enthalten keine Informationen zu copy .

Wird diese Vignette bald verfügbar sein?

+1 für interne Vignette. Ich (und ich schätze, ein paar andere) sind sehr daran interessiert, etwas zur C-Seite beizutragen, aber ich bin ein bisschen eingeschüchtert von den (wie es aussieht) 35k Zeilen C-Code ... es allein' -- eine Einführung in die Interna könnte Wunder bewirken!

Wollte mich einklinken und fragen, ob Beiträge zur Vignette von Nicht-Code-Mitwirkenden (wie mir) akzeptiert werden. Ich bin besonders daran interessiert, zur Joins-Vignette beizutragen, da ich anfangs ziemliche Probleme damit hatte und zu Lösungen von Aruns Antworten auf Stackoverflow geführt wurde, und ich hätte gerne eine Anleitung dazu, falls erlaubt.

@arunsrinivasan Ich sehe, dass Sie einen Punkt haben IDateTime vignette . Vielleicht könnte es in die allgemeinere Vignette aufgenommen werden, die von @jangorecki vorgeschlagen wurde: vignetten: Zeitreihen - geordnete Beobachtungen ?

Außerdem erarbeite ich einen ersten Entwurf zu einigen der von jan vorgeschlagenen Themen . Vielleicht sind Teile davon auch für eine Beitrittsvignette relevant? Ich freue mich zu teilen, wenn es jemand nützlich finden kann.

@zeomal ein solcher Beitrag wäre sehr wertvoll und sehr dankbar!

@MichaelChirico , danke. @Henrik-P, wird Ihr Briefing zu normalen Joins umfassend sein - dh wird Ihr Fokus mehr auf Zeitreihen liegen? Wenn nicht, kann ich mit der Arbeit beginnen - ich habe noch keine Rolling-Joins verwendet, daher keine Kenntnisse. :)

@zeomal Hoffentlich kann ich bald den ersten Entwurf hochladen, damit du ihn dir anschauen kannst. In meinem Entwurf stelle ich ein einfaches Beispiel für einen "normalen" Join für eine einzelne Variable, time, bereit, bei der es nicht übereinstimmende Zeilen gibt. Ich benutze nomatch = NA . (maaaybe auch ein kurzes Beispiel mit nomatch = NULL )

Meine Idee war, dass dieser einfache Join einen Kontext und ein Gefühl für das Problem liefern könnte, das ich dann in den folgenden Abschnitten über rollende und nicht-gleiche Joins et al.

Vielen Dank für Ihre Bereitschaft zur Mitarbeit! .

Ich habe eine Frage zum Beitritt per Referenz bei der Vorbereitung der Vignetten. Der X[Y, new_col := old_col] führt etwas Ähnliches aus wie ein traditioneller linker Join auf X . Wenn es jedoch mehrere Übereinstimmungen mit den Schlüsseln von Y in X , wird nur der letzte (oder erste?) übereinstimmende Wert des Schlüssels beibehalten. Ist das irgendwo explizit dokumentiert? Ich hatte versucht, danach zu suchen, als ich darauf gestoßen bin, musste aber aus diesem Grund auf mein Verständnis der Aktualisierung durch Verweis zurückgreifen. Für ein reproduzierbares Beispiel

> X = data.table(a = c(1, 2, 3), m = c("a", "b", "c"))
> Y = data.table(b = c(1, 1, 4), n = c("x", "y", "z"))
> X[Y, new_col := i.n, on = "a == b"]
   a m new_col
1: 1 a       y
2: 2 b    <NA>
3: 3 c    <NA>

# an ideal left join - expected behaviour per a new user, given below
# not possible because updating row by reference isn't implemented
   a m new_col
1: 1 a       x
1: 1 a       y
2: 2 b    <NA>
3: 3 c    <NA>

Dies ist ein erwartetes Verhalten, aber für einen neuen Benutzer nicht gerade einfach. mult hat auch keinen Einfluss auf die Ausgabe. Irgendwelche Vorschläge, wie ich das dokumentiere? merge als Workaround für einen korrekten linken Join hinzufügen?

@zeomal Bitte set dokumentiert.

@zeomal Wenn Sie überprüfen möchten, wie kurz meine Behandlung von normalen (equi) Joins ist, möchte ich Sie nur wissen lassen, dass ich eine PR auf einer Timeseries-Vignette veröffentlicht habe .

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen