根据R中的行索引计算滚动和

根据R中的行索引计算滚动和,r,function,window,R,Function,Window,我试图根据窗口大小k计算分组滚动和,但如果组内行索引(n)小于k,我想使用条件k=min(n,k)计算滚动和 我的问题与这个问题类似,但我正在寻找一个为每行提供非NA值的解决方案 我可以通过使用dplyr和rollsum部分实现: library(zoo) library(dplyr) df <- data.frame(Date=rep(seq(as.Date("2000-01-01"), as.Date("2000-12-01"),by="month"),2),

我试图根据窗口大小k计算分组滚动和,但如果组内行索引(n)小于k,我想使用条件k=min(n,k)计算滚动和

我的问题与这个问题类似,但我正在寻找一个为每行提供非NA值的解决方案

我可以通过使用dplyr和rollsum部分实现:

library(zoo)
library(dplyr)
df <- data.frame(Date=rep(seq(as.Date("2000-01-01"),
            as.Date("2000-12-01"),by="month"),2),
            ID=c(rep(1,12),rep(2,12)),value=1)
df <- tbl_df(df)
df <- df %>% 
        group_by(ID) %>%
        mutate(total3mo=rollsum(x=value,k=3,align="right",fill="NA"))

df
Source: local data frame [24 x 4]
Groups: ID [2]

     Date    ID value tota3mo
   (date) (dbl) (dbl)   (dbl)
1  2000-01-01     1     1      NA
2  2000-02-01     1     1      NA
3  2000-03-01     1     1       3
4  2000-04-01     1     1       3
5  2000-05-01     1     1       3
6  2000-06-01     1     1       3
7  2000-07-01     1     1       3
8  2000-08-01     1     1       3
9  2000-09-01     1     1       3
10 2000-10-01     1     1       3
..        ...   ...   ...     ...
图书馆(动物园)
图书馆(dplyr)

df使用
rollappyr
partial=TRUE
参数:

df %>%
   group_by(ID) %>%
   mutate(roll = rollapplyr(value, 3, sum, partial = TRUE)) %>%
   ungroup()
或不带dplyr(仍需要动物园):

滚动
roll <- function(x) rollapplyr(x, 3, sum, partial = TRUE)
transform(df, roll = ave(value, ID, FUN = roll))