Ricerca…


introduzione

Il pacchetto data.table ha subito una serie di modifiche e innovazioni nel tempo. Ecco alcune potenziali insidie ​​che possono aiutare gli utenti a consultare il codice legacy o a rivedere i vecchi post del blog.

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.

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

Il duplicato di Alice è stato rimosso.

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

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

  1. Per impostazione predefinita, tutte le colonne vengono ora utilizzate dai metodi unique() , duplicated() e uniqueN() 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 esplicitamente by=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)


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow