Data.table: Viñetas

Creado en 11 nov. 2014  ·  54Comentarios  ·  Fuente: Rdatatable/data.table

Serie de viñetas HTML:

Planeado por v1.9.8

  • [] Recorrido rápido por data.table
  • [x] [Subconjunto basado en claves y búsqueda binaria rápida] (https://rawgit.com/wiki/Rdatatable/data.table/vignettes/datatable-keys-fast-subset.html)
  • [x] [Índices secundarios e indexación automática] (https://rawgit.com/wiki/Rdatatable/data.table/vignettes/datatable-secondary-indices-and-auto-indexing.html)
  • [] Se une a la viñeta . a) _uniones_ vs _subconjuntos_: ampliación del subconjunto basado en búsquedas binarias a uniones + uniones condicionales / no equitativas, uniones sucesivas y de intervalo. b) por = .EACHI, unirse + función de actualización. c) Documente el uso de i.col como se archivó en # 1038. d) También cubra sobre rendimiento / ventajas de # 1232.
  • [] Cubre get() y mget() .
  • [] Agregue sobre el fundamento del argumento on = en la pregunta frecuente (# 1623).
  • [] FAQ 5.3 necesita mencionar que es una copia _shallow_ que se hace para restaurar la sobreasignación. Gracias a Jan por vincularlo en el # 1729.

Lanzamientos futuros

  • [] datos internos de la tabla, aspectos de rendimiento y _expresividad_
  • [] Leer varios archivos ( fread + rbindlist ), ordenar, clasificar y establecer operaciones
  • [] Viñeta IDateTime
  • [] Documente la diferencia entre data.table() y data.frame() algún lugar - cuestiones relevantes: # 968, # 877. Quizás un poco más en detalle en las preguntas frecuentes.
  • [] Preguntas frecuentes de Coursera
  • [] Uso avanzado de data.table :

    • [] NSE

    • [] ...

  • [] Viñeta de tiempos (moviendo # 520 aquí para tener todo en un solo lugar, pero no estoy seguro si lo necesitamos como viñeta ya que tenemos el Wiki con puntos de referencia / tiempos).
  • [] fread+fwrite viñeta, incluye también funciones de conveniencia de fread wiki, también https://github.com/Rdatatable/data.table/issues/2855

Finalizado:

  • [x] [Introducción a data.table] (https://rawgit.com/wiki/Rdatatable/data.table/vignettes/datatable-intro-vignette.html) - sintaxis de data.table, forma general, filas de subconjunto en i , seleccione / haga en j y agregaciones usando by .
  • [x] [Semántica de referencia] (https://rawgit.com/wiki/Rdatatable/data.table/vignettes/datatable-reference-semantics.html) (_add / update / delete_ columnas por referencia, y ver que podemos combinar con i y by de la misma forma que antes)
  • [x] [Remodelación eficiente usando data.tables] (https://rawgit.com/wiki/Rdatatable/data.table/vignettes/datatable-reshape.html)
  • [x] Enlace a esta respuesta en SO en by=.EACHI hasta que termine la viñeta.

Menor:

  • [] Operaciones que usan integer64 y promocionándolas para _ enteros grandes_.

Notas (para actualizar las viñetas actuales en función de los comentarios): avíseme si me perdí algo ...

Introducción a data.table:

  • [x] order en i .
  • [x] Explique cómo nombrar columnas en j mientras selecciona / calcula.
  • [x] Enfatice que _keyby_ se aplica _después de obtener el resultado en el resultado calculado, no en la tabla de datos original.
  • [x] Mencione nuevas actualizaciones de .SDcols y columnas en with=FALSE pudiendo seleccionar columnas como colA:colB .

    Semántica de referencia:

  • [] También explique todas las demás funciones relevantes de set* aquí .. ( setnames , setcolorder etc.)

  • [] Principalmente set .
  • [x] Explique que 1b) the := operator solo está definiendo formas de usarlo; el ejemplo no funciona, ya que solo muestra dos formas diferentes de usarlo, siguiendo este comentario .

    Claves y subconjuntos basados ​​en búsquedas binarias rápidas:

  • [] Agregue un ejemplo de subconjunto usando teclas enteras / dobles.

  • [] Diferencia en el valor predeterminado "nomatch" en subconjuntos basados ​​en búsquedas binarias.
  • [] ¿Es posible reemplazar NA con subconjuntos basados ​​en búsquedas binarias?

    Preguntas frecuentes (creo que las más apropiadas aquí).

  • [x] Actualizar las preguntas frecuentes con el problema de que el puntero externo es NULL al leer un objeto R desde un archivo, por ejemplo, usando readRDS() . Actualice esta publicación SO .

  • [] Explique con un ejemplo, sobre la asignación excesiva de data.table usando alloc.col() , y cuándo usarlo (cuando necesita crear varias columnas) y por qué. Actualice esta publicación SO .
documentation internals

Todos 54 comentarios

fread es lo que menos vale la pena mencionar.
Los puntos anteriores están relacionados principalmente con la transformación de datos, fread es más una extracción de datos, por lo que podría omitirse en dicha viñeta, sin embargo, en mi opinión, vale la pena mencionar esas capacidades de data.table .

editar: ¿cuál vas a usar: Rnw o Rmd?

Acordado y actualizado.

Tengo curiosidad por saber qué hace que un resfriado sea más rápido que decir tapply . Una parte de la respuesta es gforce, pero ¿qué pasa con las funciones escritas por el usuario? No pude encontrar nada sobre esto. Hay una buena publicación sobre panda: http://wesmckinney.com/blog/?p=489
Incluso se podría comparar con sapply . Por ejemplo, supongamos que empiezo con una lista de vectores. ¿Vale la pena agregar todos los vectores en una columna en una tabla de datos y usar by lugar de sapply ?

@matthieugomez ¡pregunta interesante! Sería bueno cubrir esto también. Sigan viniendo :-).

Me interesaría aprender sobre IDateTime y algunos de sus casos de uso.

@gsee actualizado.

Siendo nuevo en R y data.table (desde marzo), diría que debe haber una introducción básica orientada a resultados en lugar de la actual orientada a funciones. En otras palabras, una cosa es leer lo que hace cada parámetro en data.table, pero a menudo tienen poco sentido sin tener un caso de uso en mente. Si bien hay ejemplos de resultados, muchas personas deben ir en la otra dirección. Es decir, saben qué salida necesitan, pero no saben qué función / parámetro / configuración es más apropiado para usar. Sería útil tener un enfoque de receta simple para comenzar.

¿Cómo creo subconjuntos de mis datos?
¿Cómo hago una operación en subconjuntos de mis datos para crear un conjunto de datos nuevo o actualizado?
¿Cómo agrego una nueva columna?
¿Cómo elimino una columna?
¿Cómo creo una sola variable?
¿Cómo creo múltiples variables?
¿Cómo realizo diferentes operaciones en diferentes subconjuntos de mis datos? (.POR)
¿Cómo utilizo data.table en una función y paso los nombres y columnas de data.table en los que operar?
¿Cómo hago varias operaciones secuenciales en la misma tabla de datos?
¿Puedo seleccionar un subconjunto de datos y realizar una operación al mismo tiempo?
¿Cuándo debo tener cuidado al crear / actualizar variables por referencia?
¿Cómo selecciono una observación por grupo (primera, última)?
¿Cómo configuro una clave y en qué se diferencia de establecer un índice?
¿En qué condiciones se elimina mi clave cuando hago una operación en mi tabla de datos?
¿Puedo usar la sintaxis normal de "fusión" o necesito usar la sintaxis de data.table (Y [X])?
¿Cómo contrajo una lista de listas en una tabla de big data? ¿Qué pasa si las columnas están en un orden diferente?

Probablemente haya un montón de otros elementos en SO que podrían editarse en una simple compilación de preguntas y respuestas.

@markdanese Gracias por sus sugerencias. Es genial tener todos estos, pero probablemente como una wiki separada, ya que son muy particulares sobre ciertas tareas. El objetivo de la viñeta es presentar la sintaxis de data.table que ilustra lo flexible y poderoso que puede ser, para que pueda realizar estas tareas usted mismo.

Estoy escribiendo las viñetas ahora (lo más rápido que puedo), y el formato es más o menos de esta manera (preguntas y respuestas) y explicando la respuesta con un ejemplo. Una vez que haya pulido la primera viñeta, tengo la intención de publicarla aquí para recibir comentarios. Sería genial saber también lo que piensas.

Gracias de nuevo.

Una mayor extensión de la idea de la página wiki: Los enlaces de preguntas frecuentes y fragmentos de código (avanzado) que se enumeran en http://www.ats.ucla.edu/stat/r/ pueden ser un recurso útil para contrastar las tareas tradicionales en R con los datos. forma .table. Hice algo como esto en una publicación de blog (http://vijaylulla.com/wp/2014/11/12/grouping-in-r-using-data-table/) para mostrárselo a mi colega. Perdón por la autopromoción descarada.

Terminé la viñeta _Introducción a data.table_ (ver enlace en la parte superior). Sería genial saber lo que piensas.

Gracias a @jangorecki y @brodieG por sus excelentes comentarios y, por supuesto, @mattdowle :-).

Esto es realmente grandioso. Ojalá existiera hace un año cuando comencé a usar data.table. Un par de pequeñas cosas a continuación para su consideración:
Es posible que desee mencionar que puede ordenar (a través de order ) en i en su resumen al final. También podría querer mencionar esto al principio. También podría mencionar que hay uniones más sofisticadas que se pueden hacer en i involucran claves que no están cubiertas. Eso le permite mencionar las funciones principales de i para que el lector pueda buscar funciones más avanzadas si las necesita. Y puede hacer un hipervínculo a ellos más tarde.

En la sección .SD escribe "ese grupo" pero puede ser más claro decir "ese grupo definido usando by ". Esto también se hace un poco más tarde.

Es posible que me lo haya perdido, pero sería bueno dejar un poco más claro que .SD con by esencialmente limita los datos a las columnas .SD y luego crea un conjunto de tablas de datos para cada combinación única de las variables en by . Luego procesa estas tablas de datos en el orden de las variables by usando las funciones de j . Incluso podría mencionar que hay símbolos especiales que permiten a los usuarios acceder a algunos de los índices generados como parte de ese procesamiento, pero que estos están más allá del alcance de la viñeta de introducción.

Nuevamente, estas son solo sugerencias. Su arduo trabajo (y el de Matt) es muy apreciado.

El sábado 17 de enero de 2015 a las 6:22 p. M., Mark Danese [email protected]
escribió:

Esto es realmente grandioso. Ojalá existiera hace un año cuando comencé a usar
tabla de datos. Un par de pequeñas cosas a continuación para su consideración:

Gracias.

Es posible que desee mencionar que puede ordenar (por orden) en i en su
resumen al final. También podría querer mencionar esto al principio.

¡Oh cielos! Gran punto. Debería agregar "order (..)" al principio, y
también se agregará al resumen.

También podría mencionar que hay uniones más sofisticadas que se pueden
hecho en i con claves que no están cubiertas. Que te permite mencionar
las principales funciones de i para que el lector pueda buscar más avanzadas
funciones si las necesitan.

Bien, lo haré.

Y puede hacer un hipervínculo a ellos más tarde.

Eso, no estoy seguro ... ya que están destinados a enviarse a CRAN, y también
en el WIKI ..

En la sección .SD escribe "ese grupo", pero podría ser más claro
diga "ese grupo definido usando por". Esto también se hace un poco más tarde como
bien.

Pensé que lo había editado en "el grupo actual", pero aparentemente no ... "por
el grupo actual, definido usando en by "- ¿cómo suena eso?

Puede que me lo haya perdido, pero sería bueno ser un poco más claro
que .SD con por esencialmente limita los datos a las columnas .SD y luego
crea un conjunto de tablas de datos para cada combinación única de las variables
en el por. Luego procesa estas tablas de datos en el orden por
variables que utilizan la (s) función (es) de j.

Creo que te lo perdiste. Está justo debajo de la cita de bloque donde está .SD
explicado (en la sección 2e). Y explica exactamente lo que mencionas aquí ...

Incluso podría mencionar que hay símbolos especiales que permiten a los usuarios
acceder a algunos de los índices generados como parte de ese procesamiento, pero que
estos están más allá del alcance de la viñeta de introducción.

Bien ... esa es la razón para no introducir otros símbolos especiales.

Nuevamente, estas son solo sugerencias. Tu arduo trabajo (y el de Matt) es enormemente
apreciado.

Grandes sugerencias. Te responderé una vez que haya subido las otras viñetas.

-
Responda a este correo electrónico directamente o véalo en GitHub
https://github.com/Rdatatable/data.table/issues/944#issuecomment -70375167
.

Eso, no estoy seguro ... ya que están destinados a enviarse a CRAN, y también
en el WIKI ..

AFAIK cuando envía el paquete a CRAN que incluye Rmd en vignettes directorio, se compilarán automáticamente para verificar si la compilación de viñeta se realizó correctamente, pero el código fuente en CRAN contendrá viñetas (html) ya compiladas por usted, no el de CRAN build / check.
CRAN es un buen lugar para viñetas, ya que para muchos usuarios es el primer lugar para buscar documentos / tutoriales, así que creo que vale la pena tenerlos en CRAN.

Y puede hacer un hipervínculo a ellos más tarde.

Eso, no estoy seguro ... ya que están destinados a ser enviados a CRAN, y también a WIKI ...

¿No funcionan los enlaces de carpetas individuales en CRAN? En realidad, no he puesto nada allí, pero esta viñeta vincula a varias otras en la misma carpeta mediante el uso de vínculos relativos y funciona bien desde R (obviamente, el vínculo no es de R, pero si instala el paquete y ejecuta las viñetas, los vínculos trabaja.

Actualizado con viñeta _Reference Semantics_.

gracias de nuevo por hacer todo esto.

solo otra sugerencia sobre algo para cubrir en una viñeta: usar data.table dentro de su propia función. no escribiendo un paquete, sino simplemente tratando de automatizar algunas tareas comunes. hay algunos trucos que no he descubierto del todo. Además, si hay una publicación en algún lugar sobre este tema, se agradecería un enlace.

finalmente, una viñeta que enumere las publicaciones de desbordamiento de pila "útiles" puede ser útil para los temas que no desea incluir en una viñeta.

solo algunos pensamientos al azar.

Dos pensamientos:

  • Enlace a las viñetas en la wiki
  • En la viñeta de semántica de referencia, agregue cómo usar: = con una expresión de lista entre comillas (o simplemente una asignación entre comillas). Tal vez esto merezca su propia viñeta, ya que la NSE (evaluación no estándar) en data.table facilita el uso interactivo pero requiere que para usar data.table en su propia función o paquete, ahora debería algo sobre quote, eval, substitute y friends. ¿Quizás agregar algo como dt [, do.call (": =", eval (my_quoted_list)] a la viñeta y luego crear una viñeta sobre NSE y sus implicaciones?

Gracias.

  1. ¿Has visto esto ?
  2. Lo más probable es que se cubra en una viñeta separada. Pero aún no hay planes.

@arunsrinivasan No, no había visto eso, ¡genial! Otro marcador

Actualizado con _Keys y subconjunto_ viñeta basada en búsqueda binaria rápida.

Muy agradable. Amo estas viñetas. Solo algunos comentarios rápidos para su consideración.

¿Cuál es el propósito de tomar el control de los nombres de las filas si no se utilizan? ¿O los utilizan los operadores especiales en j (como .N, .I, etc.)? Creo que son utilizados por data.table, pero no como índices. Siempre me ha confundido el propósito de forzar los nombres de fila numerados.

¿Por qué usar unique en la primera clave cuando se accede solo a la segunda? Si no lo hace, obtendrá muchas filas repetidas en la salida, ¿verdad? Tal vez sea obvio, pero podría ser útil decir / mostrar lo que sucede si no lo hace.

¿Es necesario cotizar todas las claves? ¿Incluso numéricos (enteros)? ¿Puedes usar un numérico como clave? ¿Alguna cosa a tener en cuenta?

¿Qué pasa si su columna clave tiene NA en ella? ¿Puedes buscarlos y reemplazarlos (como hiciste en tu ejemplo donde reemplazaste 24 con 0?

Podría ser útil explicar que keyby aplica a _output_ data.table ( ans en su ejemplo) y no a la entrada data.table ( flights en su ejemplo).

¿Puedes pasar un vector a la clave? En otras palabras, ¿puedes crear airport <- c("LGA", "JFK", "EWR") y usar airport directamente en i en tu ejemplo cerca de la parte inferior? Esto podría ayudar a configurar la idea de pasar una tabla de datos diferente para una combinación.

Error tipográfico en "correspondiente" ("correspondong"). Falta una de las marcas de retroceso en la sección de escaneo vectorial donde escribe "Los índices de fila correspondientes al origen ==" LGA "ydest ==" TPA "` se obtienen utilizando un subconjunto basado en claves ".

@markdanese sobre el

¿Por qué usar único en la primera clave cuando se accede solo a la segunda?

flights[.(unique(origin), "MIA")]

No estoy seguro de si está pidiendo mucho para sugerir una mejor explicación o no está al tanto de un uso más complejo de la clave de varias columnas.
No puede simplemente usar la búsqueda binaria en dest cuando su clave es c(origin, dest) , debe tener c(dest, origin) para usar la búsqueda binaria en dest . El uso de .(unique(origin), "MIA") utiliza la búsqueda binaria, proporcionando todos los valores disponibles para la primera columna en la clave y luego los valores selectivos en la segunda columna.
Hice una extensión para usar solo columnas selectivas de la clave. mirar el ejemplo simple también puede ayudarlo a comprender. Mi extensión no está lista para ser PR a data.table master ya que el uso de la memoria no escala tan bien como podría si se desarrollara usando funciones internas de data.table / combinado con la clave secundaria de data.table.

¿Puedes usar un numérico como clave?

Puede usar numérico como clave, se menciona en la sección Keys and their properties .

¿Alguna cosa a tener en cuenta?

No estoy seguro, pero setNumericRounding afecta la tecla numérica, vale la pena mencionarlo en la viñeta.

¿Qué pasa si su columna clave tiene NA en ella? ¿Puedes buscarlos y reemplazarlos?

Sí, is.na() está optimizado para usar la búsqueda binaria. Prueba data.table(a=c(1,NA_real_),b=c("a","b"),key="a")[.(NA_real_), .SD ,verbose=TRUE]

También a @arunsrinivasan , el error tipográfico en:

encuentra los valores coincidentes en

Gracias Jan, eso es realmente útil. Ofrecí esas preguntas como cosas que podrían mencionarse brevemente en la viñeta para ayudar a los nuevos usuarios a comprender lo que está sucediendo. Eran cosas que me vinieron a la mente (como usuario relativamente nuevo) mientras leía la documentación. Realmente no puedo contribuir al código, así que espero contribuir ayudando con la documentación.

El viernes 23 de enero de 2015 a las 8:48 p.m., Mark Danese [email protected]
escribió:

Muy agradable. Amo estas viñetas. Solo algunos comentarios rápidos para
consideración.

¿Cuál es el propósito de tomar el control de los nombres de las filas si no se utilizan? O son
que usaron los operadores especiales en j (como .N, .I, etc.)? yo pienso que ellos
son utilizados por data.table, pero no como índices. Siempre he sido
confundido por el propósito de forzar los nombres de fila numerados.

La sección 1a, justo encima de las claves y sus propiedades, tiene la respuesta.
Data.tables _inherit_ de data.frames.

¿Por qué usar único en la primera clave cuando se accede solo a la segunda? Si tu
no, obtienes muchas filas repetidas en la salida, ¿verdad? Quizás obvio
pero puede ser útil decir / mostrar lo que sucede si no lo hace.

Nuevamente, esto se explica exactamente debajo en "¿Qué está pasando aquí?". I
incluso refiérase a la sección anterior donde preparo las bases para
explicando este.

¿Es necesario cotizar todas las claves? ¿Incluso numéricos (enteros)? ¿Puedes usar un
numérico como clave? ¿Alguna cosa a tener en cuenta?

Hay un ejemplo con columnas enteras en 2d. Pensé que era
¿suficiente?

¿Qué pasa si su columna clave tiene NA en ella? ¿Puedes buscarlos y reemplazarlos?
ellos (como lo hizo en su ejemplo, donde reemplazó 24 con 0?

Buen punto. Esa es una diferencia con el escaneo vectorial. Intentaré agregar esto.

Podría ser útil explicar que keyby se aplica a _output_ data.table (
ans en su ejemplo) y no la tabla de datos de entrada (vuelos en su
ejemplo).

'keyby' ya se discutió en la primera viñeta. Pero veré si esto
Puede ser añadido.

¿Puedes pasar un vector a la clave? En otras palabras, ¿puede crear un aeropuerto?
<- c ("LGA", "JFK", "EWR") y useairportdirectly ini` en su ejemplo cerca
¿El fondo? Esto podría ayudar a establecer la idea de aprobar una
data.table para una fusión.

Contenido de la siguiente sección. Así es como pasamos a uniones.

Error tipográfico en "correspondiente" ("correspondong"). Una de las garrapatas traseras es
falta en la sección de escaneo vectorial donde escribe "Los índices de fila
correspondiente al origen == "LGA" y destino == "TPA" `se obtienen usando la clave
subconjunto basado ".

Gracias.

-
Responda a este correo electrónico directamente o véalo en GitHub
https://github.com/Rdatatable/data.table/issues/944#issuecomment -71253738
.

¡Buen trabajo en estas viñetas!
Mis comentarios pueden llegar tarde o ya cubiertos:

  • Me gustaría ver una variedad de formas / ejemplos de uso de filas y columnas dinámicas.
  • Comparación más extensa sobre fusiones y uniones.
  • Formas diferentes / más ricas de usar set . Además, sería bueno ver una explicación de por qué lo siguiente da un error (ver aquí ):
for (j in  valCols)
   set(dt_,  
    i = which(is.na(dt_[[j]])),
    j = j, 
    value= as.numeric(originTable[[j]]))

Se agregó una viñeta de remodelación a Wiki .

Excelente funcionalidad y viñeta. Gracias Arun

El martes 23 de junio de 2015 a las 21:02, Arun [email protected] escribió:

Viñeta de remodelación agregada
https://rawgit.com/wiki/Rdatatable/data.table/vignettes/datatable-reshape.html
a Wiki https://github.com/Rdatatable/data.table/wiki/Getting-started.

-
Responda a este correo electrónico directamente o véalo en GitHub
https://github.com/Rdatatable/data.table/issues/944#issuecomment -114678716
.

hombre por patterns sería bueno. Gran viñeta

¿No es necesario cargar reshape2 para usar estos comandos? Si es así, entonces eso debería mencionarse. Me gusta mucho el enfoque en "ancho a largo" y "largo a ancho". Odio absolutamente la sintaxis de reshape2 (por ejemplo, creo que "make_wide" es mucho más claro que "dcast"). Por esta razón, no escribiría los encabezados de sección como "fusionar data.tables" y "casting data.tables". Eso solo tiene sentido para las personas que están familiarizadas con el paquete reshape2. Podría comenzar con encabezados que sean más universales que los anteriores ("de largo a ancho").

Por lo que vale, no puedo hacer que la primera línea de la viñeta se ejecute usando una sesión R nueva con solo data.table cargado. No tengo idea de por qué (tal vez el modo debería ser "w" y no "wb"), pero
DT = fread("https://raw.githubusercontent.com/wiki/Rdatatable/data.table/data/melt_default.csv")
devoluciones
Error in download.file(input, tt, mode = "wb") : unsupported URL scheme

Como siempre, gracias por hacer esto. Es realmente útil.

@markdanese gracias por los excelentes comentarios.

  1. reshape2 no se requerirá de data.table v1.9.6 . También se actualizó esto en la viñeta.
  2. Se agregó 'ancho a largo' y 'largo a ancho' a los títulos y otros lugares para evitar confusiones a las personas que son nuevas en este tema.
  3. https en fread se implementa en la versión devel. Por lo tanto, todavía no podrá ejecutar ese código con v1.9.4 . Actualice o espere un poco :-).

Gracias por tu coraje.

@jangorecki patterns() no se exportará. El uso se ampliará por [.data.table que se utilizará para seleccionar columnas, := , .SDcols etc.

@arunsrinivasan sigue siendo el manual de patterns puede ayudar, de la misma forma que hay uno para := . Solo porque muchas personas (creo) usan ?fun para comprender el código que leen.

En la viñeta _join_ puede valer la pena agregar los ejemplos SQL correspondientes de uniones data.table para que sea más fácil de captar para los chicos de db.
Se pueden encontrar ejemplos de la declaración SQL correspondiente, por ejemplo, en SO ¿Cómo unir (fusionar) marcos de datos (interno, externo, izquierdo, derecho)? .

También sería genial tener algunas viñetas de "Refugiados":

  • data.table para Stata usuarios
  • data.table para SQL usuarios
  • data.table para Matlab usuarios
  • data.table para Python / pandas usuarios
  • incluso data.table para dplyr usuarios

etc. Como una guía de inicio rápido, pero orientada a los emigrados.

Se agregó una viñeta Secondary indices and auto indexing . Esto debería permitir una transición suave de subconjuntos a uniones para la próxima viñeta en la que trabajaré.

@arunsrinivasan ¿no es más apropiado no usar _secondary_ en relación con _indices_? se usó para _ teclas_ donde era importante. Ahora parece redundante una vez que cambiamos a la denominación _index_.

@jangorecki Creo que "secundaria" es útil por su relación con las claves (primaria), tal vez:

Clasificación secundaria

¿Es una mejor descripción?

pero ya se ha utilizado la palabra _index_, se ve mejor que la _ ordenación secundaria_ :)

Entonces, ¿lo llamaría "indexación automática"? La "clasificación secundaria e indexación automática" de la OMI se siente más informativa

_auto_ puede ser de alguna manera engañoso, ya que los índices deberían funcionar para _auto_ crear índices, y también para el uso de índices creados manualmente - # 1422 dirige la limitación actual en ese asunto.

Veo. Todavía me falta su alternativa preferida, ¿solo "índices"?

no es perfecto, pero se prefiere a los _índices secundarios_

Me gusta mucho esta última viñeta. Lo único que pensé fue que podría ser útil mencionar qué tipos de operaciones hacen que se elimine el índice. Según mis pruebas, parece prácticamente cualquier cosa que cambie el número de filas o cualquier operación que involucre la columna indexada.

Pensé que los ejemplos de "on" fueron realmente útiles.

@markdanese buen punto, agregará.

Gracias por las viñetas actualizadas con el lanzamiento de v1.9.8.
La "Semántica de referencia" se refiere a la función copy() y sus nuevas capacidades para hacer copias superficiales (especialmente dentro de funciones, algo en lo que estoy realmente interesado):

"Sin embargo, podríamos mejorar aún más esta funcionalidad mediante la copia superficial en lugar de la copia profunda. De hecho, nos gustaría mucho proporcionar esta funcionalidad para la v1.9.8 .

Pero falta la viñeta del diseño y el vínculo apunta a un problema antiguo. El manual de referencia no proporciona más información sobre copy() que la proporcionada en la viñeta. El resto de las viñetas no proporcionan ninguna información sobre copy .

¿Estará disponible pronto esta viñeta?

+1 para viñeta interna. Yo (y supongo que algunos otros) estoy bastante interesado en contribuir un poco en el lado C de las cosas, pero estoy un poco intimidado por las (tal como están) 35k líneas de código C ... bastante la curva de aprendizaje para 'ir solo '- ¡una introducción a los componentes internos podría hacer maravillas!

Quería intervenir y preguntar si se aceptan contribuciones a la viñeta de contribuyentes que no sean de código (como yo). Estoy particularmente interesado en contribuir a la viñeta de combinaciones, ya que inicialmente tuve algunos problemas con ella y me guiaron a las soluciones de las respuestas de Arun en Stackoverflow, y me gustaría recibir orientación sobre cómo hacerlo, si está permitido.

@arunsrinivasan Veo que tienes un punto IDateTime vignette . Quizás podría incluirse en la viñeta más general sugerida por @jangorecki : viñetas: series temporales - ¿

Además, estoy preparando un primer borrador sobre algunos de los temas sugeridos por jan . ¿Quizás algunas partes también pueden ser relevantes para una viñeta de combinación? Me complace compartir si alguien puede encontrarlo útil.

@zeomal ¡ tal contribución sería muy valiosa y muy apreciada!

@MichaelChirico , gracias. @ Henrik-P, ¿su informe sobre las uniones normales será completo, es decir, se centrará más en las series temporales? Si no es así, puedo empezar a trabajar en él; todavía no he usado uniones rodantes, por lo que no tengo ningún conocimiento. :)

@zeomal Espero poder subir el primer borrador pronto, para que puedan echarle un vistazo. En mi borrador, proporciono un ejemplo simple de una combinación "normal" en una sola variable, tiempo, donde hay filas que no coinciden. Yo uso nomatch = NA . (quizás también sea un ejemplo rápido con nomatch = NULL )

Mi idea era que esta combinación simple podría proporcionar un contexto y una sensación para el problema, que luego trataré más a fondo en las siguientes secciones sobre combinaciones rodantes y no equi et al.

¡Muchas gracias por su disposición a contribuir! .

Tengo una pregunta sobre unirme por referencia, mientras preparo las viñetas. El X[Y, new_col := old_col] realiza algo similar a una combinación izquierda tradicional en X . Sin embargo, si hay varias coincidencias con las claves de Y en X , solo se conserva el último (¿o el primero?) Valor coincidente de la clave. ¿Está esto explícitamente documentado en alguna parte? Intenté buscar esto cuando lo encontré, pero tuve que recurrir a mi comprensión de la actualización por referencia por la razón. Para un ejemplo reproducible,

> X = data.table(a = c(1, 2, 3), m = c("a", "b", "c"))
> Y = data.table(b = c(1, 1, 4), n = c("x", "y", "z"))
> X[Y, new_col := i.n, on = "a == b"]
   a m new_col
1: 1 a       y
2: 2 b    <NA>
3: 3 c    <NA>

# an ideal left join - expected behaviour per a new user, given below
# not possible because updating row by reference isn't implemented
   a m new_col
1: 1 a       x
1: 1 a       y
2: 2 b    <NA>
3: 3 c    <NA>

Este es el comportamiento esperado, pero no es exactamente sencillo para un nuevo usuario. mult tampoco afecta la salida. ¿Alguna sugerencia sobre cómo puedo documentar esto? ¿Agregar merge como solución para una combinación izquierda adecuada?

@zeomal, por favor publique su pregunta futura sobre la viñeta de unirse en el número # 2181 en su lugar. Parece un lugar mejor. Está documentado en set .

@zeomal Si desea verificar qué tan breve es mi tratamiento en las uniones normales (equi), solo quiero informarle que publiqué un PR en una viñeta de serie temporal .

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

tcederquist picture tcederquist  ·  3Comentarios

rafapereirabr picture rafapereirabr  ·  3Comentarios

st-pasha picture st-pasha  ·  3Comentarios

DavidArenburg picture DavidArenburg  ·  3Comentarios

sengoku93 picture sengoku93  ·  3Comentarios