4

いくつかの行によってオフセットされたデータフレーム内の既存の列のコピーを作成しようとしています。

たとえば、column2が1だけオフセットされたcolumn1のコピーである場合、

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

$column2
[1] 0 1 2 3 4

私は次のコードである程度の成功を収めました:

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

ただし、30以上オフセットすると、エラーが発生し始めます。私のデータは、オフセットが行数よりも大きいという問題にならないように十分な長さです。エラーは次のとおりです。

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

前もって感謝します!plyrでうまく機能する高速ループフリーバージョンが好まれます。ここでの目的は、時系列データを最大1年のさまざまなラグに分割し、さまざまな方法で結果を分析することです。

4

1 に答える 1

9

時系列演算には、適切な時系列クラスを使用してください。人気のあるお気に入りはzooxtsで、どちらにもたくさんのドキュメントがあります。

簡単な例として、

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

しかし、手でそれをしないでください。そして、ここで「[r]xts」または[r]zoo'を検索して、Rタグ内を検索します。

于 2010-11-18T21:27:18.700 に答える