R Crie uma cópia de uma coluna onde a nova coluna é compensada por algum valor fixo

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

  •  26-09-2019
  •  | 
  •  

Pergunta

Estou procurando criar uma cópia de uma coluna existente em um quadro de dados que seja compensado por várias linhas.

Por exemplo, se a coluna 2 é uma cópia da coluna 1 com deslocamento por 1, então

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

$column2
[1] 0 1 2 3 4

Tive algum sucesso com o seguinte código:

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

No entanto, começa a dar erros se eu compensar 30 ou mais. Meus dados são longos o suficiente para que isso não seja um problema de o deslocamento ser maior que o número de linhas. O erro é:

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

Desde já, obrigado! Uma versão livre de loop rápida que é bom com Plyr seria preferido. A intenção aqui é interromper os dados do TimeSeries em vários atrasos em até um ano e depois analisar os resultados de várias maneiras.

Foi útil?

Solução

Por favor Use uma classe de série temporal adequada para operações de séries temporais. Os favoritos populares são jardim zoológico e XTS ambos bastante de documentação.

Como um exemplo simples, 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
> 

Mas apenas não faça isso à mão. E pesquise aqui por '[r] xts' ou [r] zoológico 'para pesquisar na tag R.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top