Buscar..


Introducción

El paquete data.table ha sufrido una serie de cambios e innovaciones a lo largo del tiempo. Aquí hay algunos escollos potenciales que pueden ayudar a los usuarios a mirar el código heredado o revisar las publicaciones antiguas del blog.

Único y duplicado ya no funciona en datos con clave.

Esto es para aquellos que se mueven a data.table> = 1.9.8

Tienes un conjunto de datos de dueños y nombres de mascotas, pero sospechas que se han capturado algunos datos repetidos.

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

Recordar tecleando una tabla lo ordenará. Alice ha sido ingresada dos veces.

> 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

Supongamos que usó unique método unique para deshacerse de los duplicados en sus datos en función de la clave, utilizando la fecha de captura de datos más reciente configurando de Último a VERDADERO.

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 duplicado ha sido eliminado.

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

Esto no funciona. Todavía 4 filas!

Fijar

Utilice el parámetro by= que ya no utiliza de forma predeterminada su clave, sino todas las columnas.

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

Ahora todo está bien.

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

Detalles y corrección provisional

Vea el artículo 1 en las notas de la versión de NOTICIAS para más detalles:

Cambios en v1.9.8 (en CRAN 25 Nov 2016)

POTENCIALMENTE QUE CAMBIAN

  1. Por defecto, todas las columnas ahora se usan con los métodos de tabla de datos unique() , duplicated() y uniqueN() , # 1284 y # 1841. Para restaurar el comportamiento anterior: options(datatable.old.unique.by.key=TRUE) . En 1 año, esta opción para restaurar el valor predeterminado anterior quedará en desuso con una advertencia. En 2 años se eliminará la opción. Por favor pase explícitamente la by=key(DT) para mayor claridad. Sólo se ve afectado el código que se basa en el valor predeterminado. 266 paquetes de CRAN y bioconductores que usan data.table se verificaron antes de su lanzamiento. 9 necesarios para cambiar y fueron notificados. Cualquier línea de código sin cobertura de prueba se habrá perdido por estas verificaciones. Cualquier paquete que no esté en CRAN o Bioconductor no fue verificado.

Por lo tanto, puede usar las opciones como una solución temporal hasta que su código esté arreglado.

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


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow