data.table
Perché il mio vecchio codice non funziona?
Ricerca…
introduzione
unico e duplicato non funziona più su data.table con chiave
Questo è per chi si sposta su data.table> = 1.9.8
Hai un set di dati di proprietari e nomi di animali domestici, ma sospetti che siano stati catturati alcuni dati ripetuti.
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
Ricorda di digitare una tabella per ordinarla. Alice è stata inserita due volte.
> 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
Supponiamo che tu abbia usato unique
per sbarazzarti dei duplicati nei tuoi dati in base alla chiave, utilizzando la data di acquisizione dati più recente impostando da Ultimo a VERO.
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
Il duplicato di Alice è stato rimosso.
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
Questo non funziona. Ancora 4 righe!
fissare
Utilizza il parametro by=
che non è più impostato di default sulla tua chiave ma su tutte le colonne.
clean.DT <- unique(DT, by = key(DT), fromLast = TRUE)
Ora va tutto bene.
> clean.DT
pet owner entry.date
1: dog Alice 14/2/2016
2: dog Bob 31/12/2015
3: cat Charlie 14/2/2016
Dettagli e correzione di stopgap
Vedere l' articolo 1 nelle note sulla versione di NEWS per i dettagli:
Cambiamenti in v1.9.8 (su CRAN 25 Nov 2016)
CAMBIAMENTI POTENZIALMENTE DI BREAKING
- Per impostazione predefinita, tutte le colonne vengono ora utilizzate dai metodi
unique()
,duplicated()
euniqueN()
data.table, # 1284 e # 1841. Per ripristinare il vecchio comportamento:options(datatable.old.unique.by.key=TRUE)
. In 1 anno questa opzione per ripristinare il vecchio valore predefinito sarà deprecata con avviso. In 2 anni l'opzione verrà rimossa. Si prega di passare esplicitamenteby=key(DT)
per chiarezza. Solo il codice che si basa sull'impostazione predefinita è interessato. 266 pacchetti CRAN e Bioconductor che utilizza data.table sono stati controllati prima del rilascio. 9 necessari per cambiare e sono stati notificati. Eventuali linee di codice senza copertura di prova saranno state perse da questi controlli. I pacchetti non su CRAN o Bioconductor non sono stati controllati.
Quindi puoi utilizzare le opzioni come soluzione temporanea finché il tuo codice non viene corretto.
options(datatable.old.unique.by.key=TRUE)