Suche…


Einführung

Das data.table-Paket hat im Laufe der Zeit eine Reihe von Änderungen und Neuerungen erfahren. Hier sind einige potenzielle Fallstricke, die Benutzern helfen können, älteren Code anzuzeigen oder alte Blogbeiträge zu überprüfen.

unique und duplicated funktioniert bei keyed data.table nicht mehr

Dies ist für diejenigen, die zu data.table> = 1.9.8 wechseln

Sie haben einen Datensatz von Tierbesitzern und -namen, vermuten jedoch, dass wiederholt Daten erfasst wurden.

library(data.table)
DT <- data.table(pet = c("dog","dog","cat","dog"),
                 owner = c("Alice","Bob","Charlie","Alice"),
                 entry.date = c("31/12/2015","31/12/2015","14/2/2016","14/2/2016"),
                 key = "owner")


> tables()
     NAME NROW NCOL MB COLS                 KEY  
[1,] DT      4    3  1 pet,owner,entry.date owner
Total: 1MB

Wenn Sie eine Tabelle neu eingeben, wird sie sortiert. Alice wurde zweimal eingegeben.

> DT
   pet   owner entry.date
1: dog   Alice 31/12/2015
2: dog   Alice  14/2/2016
3: dog     Bob 31/12/2015
4: cat Charlie  14/2/2016

Angenommen, Sie haben " unique , um Duplikate in Ihren Daten basierend auf dem Schlüssel zu entfernen, und verwenden Sie das letzte Datum der Datenerfassung, indem Sie "Last" auf TRUE setzen.

1.9.8
clean.DT <- unique(DT, fromLast = TRUE)

> tables()
    NAME     NROW NCOL MB COLS                 KEY  
[1,] clean.DT    3    3  1 pet,owner,entry.date owner
[2,] DT          4    3  1 pet,owner,entry.date owner
Total: 2MB

Alice-Duplikat wurde entfernt.

1.9.8
clean.DT <- unique(DT, fromLast = TRUE)

> tables()
     NAME     NROW NCOL MB COLS                 KEY  
[1,] clean.DT    4    3  1 pet,owner,entry.date owner
[2,] DT          4    3  1 pet,owner,entry.date owner

Das funktioniert nicht. Noch 4 Reihen!

Fix

Verwenden Sie den by= -Parameter, der nicht mehr standardmäßig auf Ihren Schlüssel, sondern auf alle Spalten angewendet wird.

clean.DT <- unique(DT, by = key(DT), fromLast = TRUE)

Nun ist alles gut.

> clean.DT
   pet   owner entry.date
1: dog   Alice  14/2/2016
2: dog     Bob 31/12/2015
3: cat Charlie  14/2/2016

Details und Überbrückung

Weitere Informationen finden Sie in Punkt 1 der NEWS- Versionshinweise:

Änderungen in v1.9.8 (am CRAN 25 Nov 2016)

MÖGLICHE BRECHENDE ÄNDERUNGEN

  1. Standardmäßig werden jetzt alle Spalten von den Methoden unique() , duplicated() und uniqueN() data.table (# 1284 und # 1841) verwendet. Um das alte Verhalten wiederherzustellen: options(datatable.old.unique.by.key=TRUE) . In 1 Jahr wird diese Option zum Wiederherstellen der alten Standardeinstellung mit Warnung verworfen. In 2 Jahren wird die Option entfernt. Bitte übergeben Sie zur Klarheit explizit die by=key(DT) . Es ist nur Code betroffen, der sich auf den Standard bezieht. 266 CRAN- und Bioconductor-Pakete mit data.table wurden vor der Veröffentlichung geprüft. 9 mussten geändert werden und wurden benachrichtigt. Alle Codezeilen ohne Testabdeckung wurden bei diesen Prüfungen nicht berücksichtigt. Pakete, die nicht auf CRAN oder Bioconductor basieren, wurden nicht geprüft.

Daher können Sie die Optionen als temporäre Problemumgehung verwenden, bis der Code behoben ist.

options(datatable.old.unique.by.key=TRUE)


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow