11

Rで時系列を扱うのに問題があります。

#--------------read data

wb = loadWorkbook("Countries_Europe_Prices.xlsx") 
df = readWorksheet(wb, sheet="Sheet2")

x <- df$Year
y <- df$Index1

y <- lag(y, 1, na.pad = TRUE)
cbind(x, y)

次の出力が得られます。

        x     y
 [1,] 1974    NA
 [2,] 1975  50.8
 [3,] 1976  51.9
 [4,] 1977  54.8
 [5,] 1978  58.8
 [6,] 1979  64.0
 [7,] 1980  68.8
 [8,] 1981  73.6
 [9,] 1982  74.3
[10,] 1983  74.5
[11,] 1984  72.9
[12,] 1985  72.1
[13,] 1986  72.3
[14,] 1987  71.7
[15,] 1988  72.9
[16,] 1989  75.3
[17,] 1990  81.2
[18,] 1991  84.3
[19,] 1992  87.2
[20,] 1993  90.1

しかし、y の最初の値を 50.8 などにします。つまり、負のラグを取得したいのです。わからない、どうすればいいの?

私の問題はこの問題と非常によく似ていますが、解決できません。私はまだ解決策を理解していないと思います...

R ベクトル/データフレームの基本的なラグ

4

4 に答える 4

3

このリンクから完全に取得した、これを行う簡単な方法があります。ここで行うことは、何をすべきかを段階的に説明することです。

最初に、次のコードを実行して次の関数を作成します。

shift<-function(x,shift_by){
    stopifnot(is.numeric(shift_by))
    stopifnot(is.numeric(x))

    if (length(shift_by)>1)
        return(sapply(shift_by,shift, x=x))

    out<-NULL
    abs_shift_by=abs(shift_by)
    if (shift_by > 0 )
        out<-c(tail(x,-abs_shift_by),rep(NA,abs_shift_by))
    else if (shift_by < 0 )
        out<-c(rep(NA,abs_shift_by), head(x,-abs_shift_by))
    else
        out<-x
    out
}

shiftこれにより、2 つの引数で呼び出される関数が作成されます。1 つはラグ/リードを操作するために必要なベクトルで、もう 1 つは必要なラグ/リードの数です。

例:

次のベクトルがあるとします。

x<-seq(1:10)

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

xの最初のオーダーラグが必要な場合

shift(x,-1)
[1] NA  1  2  3  4  5  6  7  8  9 

xの 1 次リード (負のラグ)が必要な場合

shift(x,1)
[1]  2  3  4  5  6  7  8  9 10 NA
于 2015-02-10T21:20:23.920 に答える
3

ラグ()関数の反対はリード()です

于 2019-08-24T19:20:32.903 に答える