http://notchained.hatenablog.com/entry/2015/04/24/223027
を参考にラグをとりたいのですが、解説にもあるようにやはり先頭行がNAになってしまいます。
データフレームの2列目から20000列目までをラグをとりたいですが、2つほど気になる点があります。

  1. 新しい列を作りたくないのですが、その場合、library(tidyverse)のもとで

    mutate(a = a - lag(a))
    

    でよろしいでしょうか。

  2. 先頭行の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] ="

でした。