filtrar - data.table: ¿setkey(...) crea un índice o reordena físicamente las filas en una tabla de datos?
filtrar datos en r (1)
Esta pregunta (muy básica) es el resultado de un intercambio here .
La documentación para setkey()
establece:
setkey () ordena una tabla de datos y la marca como ordenada. Las columnas ordenadas son la clave. La clave puede ser cualquier columna en cualquier orden. Las columnas se ordenan siempre en orden ascendente. La tabla se cambia por referencia ... (énfasis añadido)
Siempre he interpretado que esto significa que setkey()
crea un índice, en lugar de reorganizar físicamente las filas de la tabla de datos (similar a la indexación de una tabla de base de datos). Pero si esto era cierto, al eliminar la clave (usando setkey(DT,NULL)
), debería eliminar el índice y restaurar la tabla de datos a su orden original, sin clasificar. Esto no es lo que pasa:
library(data.table)
DT <- data.table(a=3:1, b=1:3, c=5:7); DT
a b c
1: 3 1 5
2: 2 2 6
3: 1 3 7
setkey(DT,a); DT
a b c
1: 1 3 7
2: 2 2 6
3: 3 1 5
setkey(DT,NULL)
a b c
1: 1 3 7
2: 2 2 6
3: 3 1 5
Así que dos preguntas:
1: Si las filas se reorganizan (ordenan), ¿qué significa "cambiado por referencia"?
2: ¿Qué hace setkey(DT,NULL)
?
Las filas están ordenadas. "Cambiado por referencia" aquí significa que no hay copia de toda la tabla y las filas simplemente se intercambian.
setkey(DT, NULL)
es equivalente asetattr(DT, "sorted", NULL)
. Simplemente anula el atributo "ordenado".