R Crear una copia de una columna en la que la nueva columna se ve compensado por una cierta cantidad fija

StackOverflow https://stackoverflow.com/questions/4219715

  •  26-09-2019
  •  | 
  •  

Pregunta

Estoy buscando para crear una copia de una columna existente en una trama de datos que se compensa con un número de filas.

por ejemplo. si column2 es una copia de column1 compensado por 1, entonces

> dataframe
$column1
[1] 1 2 3 4 5

$column2
[1] 0 1 2 3 4

He tenido algo de éxito con el siguiente código:

offset7 <- rep(0, 7)
dataframe$column1.prev7 = c(offset7, dataframe$column1[1:(length(dataframe$column1)-7)])

Sin embargo, empieza a dar errores si compensa con 30 o más. Mis datos es lo suficientemente largo para que esto no sea un problema del ser compensado mayor que el número de filas. El error es:

Error in dataframe$column1[1:(length(dataframe$column1) - 30)] : 
  only 0's may be mixed with negative subscripts

Gracias de antemano! Una versión libre de bucle rápido que juega agradable con plyr sería preferido. La intención aquí es romper los datos de series temporales en diversos desfases de hasta un año y luego analizar los resultados de varias maneras.

¿Fue útil?

Solución

utilizar una clase adecuada de series de tiempo para las operaciones de series de tiempo. favoritos populares son href="http://cran.r-project.org/package=zoo" y XTS ambos de los cuales han un montón de documentación.

Como un simple ejemplo, considere

> library(xts)
> foo <- xts(100:109, order.by=Sys.Date()+0:9)
> merge(foo,  l1=lag(foo,1), lm1=lag(foo,-1))
           foo  l1 lm1
2010-11-18 100  NA 101
2010-11-19 101 100 102
2010-11-20 102 101 103
2010-11-21 103 102 104
2010-11-22 104 103 105
2010-11-23 105 104 106
2010-11-24 106 105 107
2010-11-25 107 106 108
2010-11-26 108 107 109
2010-11-27 109 108  NA
> 

Pero no lo haga con la mano. Y aquí para buscar '[r] XTS' o [r] zoológico' para buscar dentro de la etiqueta I.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top