data.table
Waarom werkt mijn oude code niet?
Zoeken…
Invoering
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.
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.
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
- Standaard worden alle kolommen nu gebruikt door
unique()
,duplicated()
enuniqueN()
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 explicietby=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)