時系列データでラグを取った場合のNAへの対処
http://notchained.hatenablog.com/entry/2015/04/24/223027
を参考にラグをとりたいのですが、解説にもあるようにやはり先頭行がNAになってしまいます。
データフレームの2列目から20000列目までをラグをとりたいですが、2つほど気になる点があります。
新しい列を作りたくないのですが、その場合、
library(tidyverse)
のもとでmutate(a = a - lag(a))
でよろしいでしょうか。
先頭行のNAをその次の行の値で埋めたいのですが
列名が非常に複雑で、番地を指定してループを回す方法で行きたいのですがうまくいきません。
下のコードではエラーでした。for(i in 2:20000){ df <- df %>% mutate(df[,i] = df[,i] -lag(df[,i])) } for (i in 2:20000){df[1,i] <- df[2,i]}
追記
先頭行のNAをその次の行の値で埋めるとはこういう感じです。
投稿を利用させていただきました。
df_lag
#> col1 col2 col3 col4 col5
#> 1 NA NA NA NA NA
#> 2 6 5 4 3 2
#> 3 1 1 1 1 1
#> 4 1 1 1 1 1
#> 5 1 1 1 1 1
#> 6 1 1 1 1 1
#> 7 1 1 1 1 1
#> 8 1 1 1 1 1
#> 9 1 1 1 1 1
#> 10 1 1 1 1 1
df_lag[1,] <- df_lag[2,]
df_lag
#> col1 col2 col3 col4 col5
#> 1 6 5 4 3 2
#> 2 6 5 4 3 2
#> 3 1 1 1 1 1
#> 4 1 1 1 1 1
#> 5 1 1 1 1 1
#> 6 1 1 1 1 1
#> 7 1 1 1 1 1
#> 8 1 1 1 1 1
#> 9 1 1 1 1 1
#> 10 1 1 1 1 1
追記2
for(i in 2:20000){
df[,i] <- df[,i] - lag(df[,i])
}
を実行するとエラーは出ませんが2:20000列目がすべてNAになってしまいます。
また、エラーは
Error: unexpected '=' in:
"for(i in 2:20000){
df <- df %>% mutate(df[,i] ="
でした。