R上一个星期总[复制](R previous week total [duplicate])

2019-10-23 06:08发布

这个问题已经在这里有一个答案:

  • 集料的一周中的R 1个回答

我有日期(列B)和道达尔(A列)变量 - 如何创建R中,总结过去7天的值得彩民的一个新的变量?

在Excel中,我有以下公式:

=SUMIFS($A:$A,$B:$B, ">="&$B20-7,$B:$B,"<"&$B20)

我只是不知道如何转换这在R.建议工作?

Answer 1:

这将做到这一点,先进的,但短期 - 本质上是一个衬垫。

# Initialze some data
date <- seq(as.Date("2001-01-01"),as.Date("2001-01-31"),"days")
tot <- trunc(rnorm(31,100,20))
df <- data.frame(date,tot)

# Now compute week sum by summing a subsetted df for each date
df$wktot <- sapply(df$date,function(x)sum(df[difftime(df$date,x,,"days") %in% 0:-6,]$tot))

改变变量名,以匹配所带来的问题。

它还可以处理任何顺序和每天多个条目的数据。

编辑补充意见,使之适合在一个窗口。



Answer 2:

如果每天一个总的是,该功能可帮助:

rollSums <- function(totals, roll) {
  res <- c()
  for(i in 1:(length(totals)-roll)) {
    res <- c(res, sum(totals[0:(roll-1)+i]))
  }
  res
}

df1
   Total       Date
1      3 2015-01-01
2      8 2015-01-01
3      4 2015-01-02
4      7 2015-01-03
5      6 2015-01-04
6      1 2015-01-04
7     10 2015-01-05
8      9 2015-01-06
9      2 2015-01-07
10     5 2015-01-08

rollSums(df1$Total, 3)
[1] 15 19 17 14 17 20 21

rollSums(df1$Total, 4)
[1] 22 25 18 24 26 22

这将需要两个参数,以总计多少天,你想在每一个和载体。

数据

dput(df1)
structure(list(Total = c(3L, 8L, 4L, 7L, 6L, 1L, 10L, 9L, 2L, 
5L), Date = structure(c(16436, 16436, 16437, 16438, 16439, 16439, 
16440, 16441, 16442, 16443), class = "Date")), .Names = c("Total", 
"Date"), row.names = c(NA, -10L), class = "data.frame")

更新

如果您运行与在同一天多个值的情况下,这里有一个解决方案。 出人意料的是,@MikeWise有一个班轮可以做到这一切。 见对方的回答。

grouped.roll <- function(DF, Values, Group, roll) {
  totals <- eval(substitute(with(DF, tapply(Values, Group, sum))))
  newsums <- rollSums(totals, roll)
  data.frame(Group=names(totals), Sums=c(rep(NA, roll), newsums))
}

它使用rollSums我之前使用。 直到所需的天分组开始它会吐出来港定居。 这可能是比其他答案唯一的优势。 但是,他们可以很容易地编辑在,我敢肯定。 只是提供参考更多的选择。

grouped.roll(df1, Total, Date, 3)
       Group Sums
1 2015-01-01   NA
2 2015-01-02   NA
3 2015-01-03   NA
4 2015-01-04   22
5 2015-01-05   18
6 2015-01-06   24
7 2015-01-07   26
8 2015-01-08   21


文章来源: R previous week total [duplicate]
标签: r sum