【问题标题】:Calculate rolling difference in R计算 R 中的滚动差异
【发布时间】:2018-07-21 08:44:53
【问题描述】:

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

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

【问题讨论】:

    标签: r dataframe rolling-computation


    【解决方案1】:

    您可以使用lag 中的dplyr,如下所示

    df$Diff <- df$Count - dplyr::lag(df$Count, n = 5)
    

    【讨论】:

      【解决方案2】:

      尝试使用 zoo 包中的 diff.zoona.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))
      

      【讨论】:

        【解决方案3】:

        你可以使用基础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))
        

        【讨论】:

          【解决方案4】:
          require(data.table)
          setDT(df)[, Diff := Count - shift(Count, 5)]
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-03-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-11-13
            • 1970-01-01
            • 2014-09-17
            相关资源
            最近更新 更多