Zoeken…


Invoering

Het data.table-pakket heeft in de loop van de tijd een aantal veranderingen en innovaties ondergaan. Hier zijn enkele mogelijke valkuilen die gebruikers kunnen helpen bij het kijken naar oude code of het bekijken van oude blogberichten.

uniek en gedupliceerd werkt niet meer op sleuteldata.table

Dit is voor degenen die naar data.table> = 1.9.8 gaan

U hebt een gegevensset van eigenaren en namen van huisdieren, maar u vermoedt dat enkele herhaalde gegevens zijn vastgelegd.

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

Als u een tabel opnieuw indrukt, wordt deze gesorteerd. Alice is twee keer ingevoerd.

> 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

Stel dat u unique hebt gebruikt om dubbele gegevens in uw gegevens op basis van de sleutel te verwijderen, met behulp van de meest recente datum voor het vastleggen van gegevens door in te stellen vanLast op WAAR.

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 duplicaat is verwijderd.

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

Dit werkt niet. Nog 4 rijen!

fix

Gebruik de parameter by= die niet langer standaard is ingesteld op uw sleutel maar op alle kolommen.

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

Nu is alles goed.

> 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 en stopgap-fix

Zie item 1 in de release-opmerkingen voor NIEUWS :

Veranderingen in v1.9.8 (op CRAN 25 nov 2016)

MOGELIJK BREKENDE VERANDERINGEN

  1. Standaard worden alle kolommen nu gebruikt door unique() , duplicated() en uniqueN() data.table-methoden, # 1284 en # 1841. Oud gedrag herstellen: options(datatable.old.unique.by.key=TRUE) . Over 1 jaar wordt deze optie om de oude standaard te herstellen met waarschuwing vervallen. Over 2 jaar wordt de optie verwijderd. Geef voor de duidelijkheid expliciet by=key(DT) . Alleen code die afhankelijk is van de standaardwaarde wordt beïnvloed. 266 CRAN- en Bioconductor-pakketten met data.table werden gecontroleerd voordat ze werden vrijgegeven. 9 moesten worden gewijzigd en werden op de hoogte gebracht. Alle regels code zonder testdekking zijn door deze controles gemist. Pakketten die niet op CRAN of Bioconductor stonden, werden niet gecontroleerd.

U kunt de opties dus als tijdelijke oplossing gebruiken totdat uw code is vastgesteld.

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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow