vehicle online official number nmvtis national motor information gov data check autocheck r data.table

online - title number search



Rolling joins: rodar hacia adelante y hacia atrĂ¡s (2)

data.table es increíble, porque puedo hacer uniones data.table , ¡e incluso hacer uniones data.table dentro de grupos !

library(data.table) set.seed(42) metrics <- data.frame( ID=c(rep(1, 10), rep(2,5), rep(3,5)), Time=c(1:10, 4:8, 8:12), val1=runif(20), val2=runif(20), val3=runif(20), val4=runif(20) ) metrics <- data.table(metrics[sample(1:nrow(metrics), 15),], key=c(''ID'', ''Time'')) calendar <- data.table(expand.grid(ID=1:3, Time=1:12), key=c(''ID'', ''Time'')) metrics[calendar,roll=TRUE]

Sin embargo, esto no es lo suficientemente impresionante para mí. Esta data.table todavía tiene NA:

> metrics[calendar,roll=TRUE] ID Time val1 val2 val3 val4 1: 1 1 0.9148060 0.9040314 0.3795592 0.675607275 2: 1 2 0.9370754 0.1387102 0.4357716 0.982817198 3: 1 3 0.9370754 0.1387102 0.4357716 0.982817198 4: 1 4 0.8304476 0.9466682 0.9735399 0.566488424 5: 1 5 0.8304476 0.9466682 0.9735399 0.566488424 6: 1 6 0.5190959 0.5142118 0.9575766 0.189473935 7: 1 7 0.7365883 0.3902035 0.8877549 0.271286615 8: 1 8 0.7365883 0.3902035 0.8877549 0.271286615 9: 1 9 0.6569923 0.4469696 0.9709666 0.693204820 10: 1 10 0.7050648 0.8360043 0.6188382 0.240544740 11: 1 11 0.7050648 0.8360043 0.6188382 0.240544740 12: 1 12 0.7050648 0.8360043 0.6188382 0.240544740 13: 2 1 NA NA NA NA 14: 2 2 NA NA NA NA 15: 2 3 NA NA NA NA 16: 2 4 0.4577418 0.7375956 0.3334272 0.042988796 17: 2 5 0.7191123 0.8110551 0.3467482 0.140479094 18: 2 6 0.9346722 0.3881083 0.3984854 0.216385415 19: 2 7 0.2554288 0.6851697 0.7846928 0.479398564 20: 2 8 0.2554288 0.6851697 0.7846928 0.479398564 21: 2 9 0.2554288 0.6851697 0.7846928 0.479398564 22: 2 10 0.2554288 0.6851697 0.7846928 0.479398564 23: 2 11 0.2554288 0.6851697 0.7846928 0.479398564 24: 2 12 0.2554288 0.6851697 0.7846928 0.479398564 25: 3 1 NA NA NA NA 26: 3 2 NA NA NA NA 27: 3 3 NA NA NA NA 28: 3 4 NA NA NA NA 29: 3 5 NA NA NA NA 30: 3 6 NA NA NA NA 31: 3 7 NA NA NA NA 32: 3 8 0.9400145 0.8329161 0.7487954 0.719355838 33: 3 9 0.9400145 0.8329161 0.7487954 0.719355838 34: 3 10 0.1174874 0.2076590 0.1712643 0.375489965 35: 3 11 0.4749971 0.9066014 0.2610880 0.514407708 36: 3 12 0.5603327 0.6117786 0.5144129 0.001570554 ID Time val1 val2 val3 val4

Podría llenar estos NA usando zoo:::na.locf , fromLast=TRUE , pero eso no es muy divertido. ¿Alguien puede pensar en una forma elegante en la que pueda hacer retroceder a NA (después de data.table avanzar) durante la data.table ?


Esto es posible en la versión 1.8.8 de data.table lanzada en marzo de 2013:

metrics[calendar, roll=TRUE, rollends=c(TRUE, TRUE)]

Del archivo data.table NEWS :

Además de TRUE / FALSE, ''roll'' ahora puede ser un número positivo (roll forward / LOCF) o un número negativo (roll backwards / NOCB). Un número finito limita la distancia a la que se rueda un valor (estancamiento limitado). roll = TRUE y roll = + Inf son equivalentes. ''rollends'' es un nuevo parámetro que contiene dos lógicos. La primera observación se desplaza hacia atrás si el primer valor de rollends es TRUE. La última observación se desplaza hacia adelante si el segundo valor de rollends es TRUE. Si roll es un número finito, el mismo límite se aplica a los fines. Nuevo valor roll = ''más cercano'' se une al valor más cercano (ya sea hacia atrás o hacia adelante) cuando el valor cae en un hueco, y al valor final de acuerdo con ''rollends''. ''rolltolast'' ha sido desaprobado. Para la compatibilidad con versiones anteriores, se convierte a {roll = TRUE; rollends = c (FALSE, FALSE)}.

Como siempre, para descargar la versión más actualizada de data.table , consulte Installation .


metrics[calendar, roll = TRUE, rollends = c(TRUE, TRUE)]