R中如何计算滚动差分?

5

我可以帮你进行翻译。以下是需要翻译的内容:

我正在尝试对数据集进行滚动差分。我有一个如下表格:

Year  Count
2017  5
2017  6
2017  7
2017  6
2017  8

我希望您能为我创建一个差异列,该列从第五行开始计算。因此,它将如下所示:

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

现在,我只是将计数列进行子集划分,并与零结合进行计算。有没有更加简洁的方法?

这是我现在正在做的:

a <- df$Count[1:5]
b <- rep(0,5)
df$Count1 <- c(b,a)
df$Diff <- df$Count - df$Count1
4个回答

11
你可以使用 dplyr 中的 lag,如下所示。
df$Diff <- df$Count - dplyr::lag(df$Count, n = 5)

7
require(data.table)
setDT(df)[, Diff := Count - shift(Count, 5)]

5
您可以使用基础的R
df$Diff <- c( rep(NA, 5), tail(df$Count, -5) - head(df$Count, -5) )

以下是使用 diff() 的变体:

df$Diff <- c(rep(NA, 5), diff(df$Count, lag=5))

2

可以尝试使用zoo包中的diff.zoona.fill函数:

library(zoo)
transform(df, diff = na.fill(diff(zoo(Count), 5, na.pad = TRUE), fill = 0))

此外,您还可以使用来自zoo库的rollapplyr函数:

transform(df, diff = rollapplyr(Count, 5 + 1, diff, 5, fill = 0))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接