R Creare una copia di una colonna in cui la nuova colonna è compensato da una certa quantità fissa

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

  •  26-09-2019
  •  | 
  •  

Domanda

Sto cercando di creare una copia di una colonna esistente in una dataframe che viene compensato da un numero di righe.

es. se column2 è una copia di column1 compensato da 1, quindi

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

$column2
[1] 0 1 2 3 4

ho avuto un certo successo con il seguente codice:

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

Tuttavia inizia dà errori se compensato da 30 o più. I miei dati è abbastanza lungo per questo non è un problema dello spostamento essendo maggiore del numero di righe. L'errore è:

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

Grazie in anticipo! Una versione gratuita ciclo veloce che gioca piacevole con plyr sarebbe preferibile. L'intenzione è quella di suddividere i dati TimeSeries in vari ritardi fino ad un anno e poi analizzare i risultati in vari modi.

È stato utile?

Soluzione

usare una vera e propria classe di serie temporali per le operazioni di serie temporali. preferiti popolari sono zoo e XTS entrambi i quali hanno un sacco di documentazione.

Come semplice esempio, si consideri

> 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
> 

Ma non farlo a mano. E cercare qui per i '[d] XTS' o [r] zoo' per la ricerca all'interno del tag R.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top