R上周总计

时间:2015-05-31 12:57:36

标签: r sum

我有Date(B列)和Total(A列)变量 - 如何在R中创建一个新的变量,它总结了前七天的Totals总值?

在Excel中,我有以下公式:

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

而我只是不知道如何将其转换为在R.建议?

2 个答案:

答案 0 :(得分:2)

这也会做得很好,先进,但很短 - 基本上是单行。

import socket
import sys

# Create a TCP/IP socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('192.168.1.108', 8080)
server_socket.bind(server_address) 
server_socket.listen(1)
while True:
    # Find connections
    connection, client_address = server_socket.accept()
    try:
        data = connection.recv(1024)
        print data

    except:
        connection.close()

更改变量名称以匹配提出的问题。

它还可以按任意顺序处理数据,每天处理多个条目。

编辑添加评论并使其适合窗口。

答案 1 :(得分:1)

如果每天总计一次,此功能可能会有所帮助:

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。它将吐出NA,直到所需的日期分组开始。这可能是唯一优于其他答案的优势。但他们很容易编辑,我敢肯定。只是提供更多选择供参考。

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