置換 - r 行列




Rベクトル/データフレームの基本的な遅れ (7)

私はRの新人であることを明らかにしますが、SPSSでは遅れのランニングはとても簡単です。 明らかにこれはユーザーエラーですが、私は何が欠けていますか?

x <- sample(c(1:9), 10, replace = T)
y <- lag(x, 1)
ds <- cbind(x, y)
ds

結果:

      x y
 [1,] 4 4
 [2,] 6 6
 [3,] 3 3
 [4,] 4 4
 [5,] 3 3
 [6,] 5 5
 [7,] 8 8
 [8,] 9 9
 [9,] 3 3
[10,] 7 7

私は私が見えると思った:

     x y
 [1,] 4 
 [2,] 6 4
 [3,] 3 6
 [4,] 4 3
 [5,] 3 4
 [6,] 5 3
 [7,] 8 5
 [8,] 9 8
 [9,] 3 9
[10,] 7 3

どんな指導も高く評価されます。


lag()は時系列と連動しますが、裸の行列を使用しようとしています。 この古い疑問embed代わりにembed使うことを提案しています。

lagmatrix <- function(x,max.lag) embed(c(rep(NA,max.lag), x), max.lag+1)

例えば

> x
[1] 8 2 3 9 8 5 6 8 5 8
> lagmatrix(x, 1)
      [,1] [,2]
 [1,]    8   NA
 [2,]    2    8
 [3,]    3    2
 [4,]    9    3
 [5,]    8    9
 [6,]    5    8
 [7,]    6    5
 [8,]    8    6
 [9,]    5    8
[10,]    8    5

lagはデータをシフトさせず、「タイムベース」だけをシフトさせます。 xは「タイムベース」がないため、 cbindは期待どおりに動作しません。 cbind(as.ts(x),lag(x))を試して、 "lag"が1になると、ピリオドが前方にシフトします。

私はzoo / xtsを時系列に使うことを提案します。 zooビネットは特に役立ちます。


これは、ベクトルまたは行列に加えて、負の遅れに対応する必要があります。

lagpad <- function(x, k=1) {
  i<-is.vector(x)
  if(is.vector(x)) x<-matrix(x) else x<-matrix(x,nrow(x))
  if(k>0) {
      x <- rbind(matrix(rep(NA, k*ncol(x)),ncol=ncol(x)), matrix(x[1:(nrow(x)-k),], ncol=ncol(x)))
  }
  else {
      x <- rbind(matrix(x[(-k+1):(nrow(x)),], ncol=ncol(x)),matrix(rep(NA, -k*ncol(x)),ncol=ncol(x)))
  }
  if(i) x[1:length(x)] else x
}

ちょうど遅れを取り除く。 yの行を次のように変更します。

y <- c(NA, x[-1])

同じことを行う簡単な方法は、データを新しいデータフレームにコピーしてインデックス番号を変更することです。 元のテーブルが隙間なく連続して索引付けされていることを確認する

例えば

tempData <- originalData
rownames(tempData) <- 2:(nrow(tempData)+1)

元のデータフレームと同じデータフレームにしたい場合は、cbind関数を使用します


標準的なR関数を使うだけで、もっと簡単な方法でこれを実現できます。

x <- sample(c(1:9), 10, replace = T)
y <- c(NA, head(x, -1))
ds <- cbind(x, y)
ds

tmp<-rnorm(10)
tmp2<-c(NA,tmp[1:length(tmp)-1])
tmp
tmp2






zoo