计算 R 中的滚动差异
Calculate rolling difference in R
我正在尝试在数据集中进行滚动差异。我有一个 table 这样的:
Year Count
2017 5
2017 6
2017 7
2017 6
2017 8
我想得到一个差值列,它是从第 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
现在我只是将计数列子集化并与零相结合进行计算。有更简洁的方法吗?
这是我现在正在做的事情:
a <- df$Count[1:5]
b <- rep(0,5)
df$Count1 <- c(b,a)
df$Diff <- df$Count - df$Count1
您可以使用 dplyr
中的 lag
,如下所示
df$Diff <- df$Count - dplyr::lag(df$Count, n = 5)
尝试使用 zoo 包中的 diff.zoo
和 na.fill
:
library(zoo)
transform(df, diff = na.fill(diff(zoo(Count), 5, na.pad = TRUE), fill = 0))
另外,rollapplyr
来自动物园:
transform(df, diff = rollapplyr(Count, 5 + 1, diff, 5, fill = 0))
您可以使用基数 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))
require(data.table)
setDT(df)[, Diff := Count - shift(Count, 5)]
我正在尝试在数据集中进行滚动差异。我有一个 table 这样的:
Year Count
2017 5
2017 6
2017 7
2017 6
2017 8
我想得到一个差值列,它是从第 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
现在我只是将计数列子集化并与零相结合进行计算。有更简洁的方法吗?
这是我现在正在做的事情:
a <- df$Count[1:5]
b <- rep(0,5)
df$Count1 <- c(b,a)
df$Diff <- df$Count - df$Count1
您可以使用 dplyr
中的 lag
,如下所示
df$Diff <- df$Count - dplyr::lag(df$Count, n = 5)
尝试使用 zoo 包中的 diff.zoo
和 na.fill
:
library(zoo)
transform(df, diff = na.fill(diff(zoo(Count), 5, na.pad = TRUE), fill = 0))
另外,rollapplyr
来自动物园:
transform(df, diff = rollapplyr(Count, 5 + 1, diff, 5, fill = 0))
您可以使用基数 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))
require(data.table)
setDT(df)[, Diff := Count - shift(Count, 5)]