计算R中的滚动差

aja*_*000 2 r calculated-columns dataframe

我正在尝试在数据集中进行滚动差异.我有这样一张桌子:

Year  Count
2017  5
2017  6
2017  7
2017  6
2017  8
Run Code Online (Sandbox Code Playgroud)

我想得到一个差异列,从第5行开始计算.所以它看起来像这样

Index  Count  Diff
1      5      NA
2      6      NA
3      7      NA
4      6      NA
5      8      NA
6      3      -2
7      4      -2
8      9      2
9      2      -4
10     1      -7
Run Code Online (Sandbox Code Playgroud)

现在我只是将count列子集化并与零结合进行计算.这样做有更整洁的方法吗?

这就是我现在正在做的事情:

a <- df$Count[1:5]
b <- rep(0,5)
df$Count1 <- c(b,a)
df$Diff <- df$Count - df$Count1
Run Code Online (Sandbox Code Playgroud)

mar*_*kus 7

你可以使用lagdplyr如下

library(dplyr)
df$Diff <- df$Count - dplyr::lag(df$Count, n = 5)
Run Code Online (Sandbox Code Playgroud)


jog*_*ogo 5

您可以使用基础R

df$Diff <- c( rep(NA, 5), tail(df$Count, -5) - head(df$Count, -5) )
Run Code Online (Sandbox Code Playgroud)

这是一个变体 diff()

df$Diff <- c(rep(NA, 5), diff(df$Count, lag=5))
Run Code Online (Sandbox Code Playgroud)


Ice*_*can 5

require(data.table)
setDT(df)[, Diff := Count - shift(Count, 5)]
Run Code Online (Sandbox Code Playgroud)