datos de unión móvil.cuadro en R


Estoy tratando de entender un poco más sobre la forma en que rolling se une al trabajo y estoy teniendo cierta confusión, esperaba que alguien pudiera aclararme esto. Para tomar un ejemplo concreto:

dt1 <- data.table(id=rep(1:5, 10), t=1:50, val1=1:50, key="id,t")
dt2 <- data.table(id=rep(1:5, 2), t=1:10, val2=1:10, key="id,t")

Esperaba que esto produjera un largo data.table donde los valores en dt2 se enrollan:

dt1[dt2,roll=TRUE]

En cambio, la manera correcta de hacer esto parece ser:

dt2[dt1,roll=TRUE]

Podría alguien explicarme más acerca de cómo unirse a data.table funciona, ya que claramente no lo estoy entendiendo correctamente. Me pensó que dt1[dt2,roll=TRUE] correspondía al equivalente sql de select * from dt1 right join dt2 on (dt1.id = dt2.id and dt1.t = dt2.t), excepto con la funcionalidad añadida locf.

Además la documentación dice:

X[Y] is a join, looking up X's rows using Y (or Y's key if it has one) 
as an index.

Esto hace que parezca que solo las cosas en X deben ser devueltas y la unión que se está haciendo es una unión interna, no externa. ¿Qué pasa en el caso cuando roll=T pero ese id en particular no existe en dt1? Jugando un poco más no puedo entender qué valor se está poniendo en la columna.

Author: kdauria, 2012-08-20

1 answers

Esa cita de la documentación parece ser de FAQ 1.12 Cuál es la diferencia entre X[Y] y merge(X,Y). ¿Encontró lo siguiente en ?data.table y ayuda?

roll Se aplica a la última columna de unión, generalmente una fecha, pero puede ser cualquier variable ordenada, irregular e incluyendo huecos. Si roll = TRUE y i's row coincide con todas las columnas excepto la última x join, y su valor en el última me uno columna cae en un hueco (incluso después de la última observación en x para ese grupo), entonces el valor predominante en x es rodó hacia adelante. Esta operación es particularmente rápida utilizando un búsqueda binaria. La operación también se conoce como última observación llevada adelante (LOCF). Por lo general, no debe haber duplicados en la clave de x, la la última columna clave es una fecha (u hora, o fecha y hora) y todas las columnas de la clave de x se unen a. Un modismo común es seleccionar un series temporales regulares contemporáneas (dts) a través de un conjunto de identificadores (id): DT[CJ(ids,dts),roll=TRUE] donde DT tiene una clave de 2 columnas (id, date) y CJ significa cross join.

rolltolast Como rollo, pero los datos no se rueda hacia adelante más allá de la última observación dentro de cada grupo definido por las columnas de unión. Valor de i debe caer en un hueco en x pero no después del final de los datos, para ese grupo definido por todas menos la última columna de unión. rollo y puede que rolltolast no sea CIERTO.

En términos de analogías izquierda / derecha a SQL se une, Prefiero pensar en que en el contexto de FAQ 2.14 Puede explicar más por qué los datos.la tabla está inspirada en una sintaxis [B] en base . Es una respuesta bastante larga, así que no la pegaré aquí.

 24
Author: Matt Dowle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-20 14:36:23