Date Sales
3/11/2017 1
3/12/2017 0
3/13/2017 40
3/14/2017 47
3/15/2017 83
3/16/2017 62
3/17/2017 13
3/18/2017 58
3/19/2017 27
3/20/2017 17
3/21/2017 71
3/22/2017 76
3/23/2017 8
3/24/2017 13
3/25/2017 97
3/26/2017 58
3/27/2017 80
3/28/2017 77
3/29/2017 31
3/30/2017 78
3/31/2017 0
4/1/2017 40
4/2/2017 58
4/3/2017 32
4/4/2017 31
4/5/2017 90
4/6/2017 35
4/7/2017 88
4/8/2017 16
4/9/2017 72
4/10/2017 39
4/11/2017 8
4/12/2017 88
4/13/2017 93
4/14/2017 57
4/15/2017 23
4/16/2017 15
4/17/2017 6
4/18/2017 91
4/19/2017 87
4/20/2017 44
这里的当前日期是2017年4月20日,我的问题是分组数据从2017年4月19日到2017年3月11日,4个相同的部分与r编程中的总和销售额?
例如:
library("xts")
ep <- endpoints(data, on = 'days', k = 4)
period.apply(data,ep,sum)
它不起作用。但是,它的开始日期为当前日期,但我需要将数据从yestderday(2017年4月19日)收集到开始日期并分成4个相等的部分。
好的,有人会很快指导我。谢谢
答案 0 :(得分:0)
Base R具有为此目的而构建的函数cut.Date()
。
然而,问题并不完全清楚OP的意图。我对Q和其他comment中提供的要求的理解是:
Book1
中获取销售数据,但不在当天,即仅使用完整的日期。xts::endpoint()
与k = 4
一起使用的尝试表明OP可能有不同的意图在四天的时间段内对数据进行分组每个。)为简洁起见,data.table
用于数据操作和聚合,lubridate
用于日期操作
library(data.table)
library(lubridate)
# coerce to data.table, convert Date column from character to class Date,
# exclude the actual date
temp <- setDT(Book1)[, Date := mdy(Book1$Date)][Date != today()]
# cut the date range in four parts
temp[, start_date_of_period := cut.Date(Date, 4)]
temp
# Date Sales start_date_of_period
# 1: 2017-03-11 1 2017-03-11
# 2: 2017-03-12 0 2017-03-11
# 3: 2017-03-13 40 2017-03-11
# ...
#38: 2017-04-17 6 2017-04-10
#39: 2017-04-18 91 2017-04-10
#40: 2017-04-19 87 2017-04-10
# Date Sales start_date_of_period
# aggregate sales by period
temp[, .(n_days = .N, total_sales = sum(Sales)), by = start_date_of_period]
# start_date_of_period n_days total_sales
#1: 2017-03-11 10 348
#2: 2017-03-21 10 589
#3: 2017-03-31 10 462
#4: 2017-04-10 10 507
感谢 chaining ,这可以在一个语句中放在一起而不使用临时变量:
setDT(Book1)[, Date := mdy(Book1$Date)][Date != today()][
, start_date_of_period := cut.Date(Date, 4)][
, .(n_days = .N, total_sales = sum(Sales)), by = start_date_of_period]
注意如果您希望以后重现结果,则必须将today()
的号码替换为mdy("4/20/2017")
,这是最后一天OP提供的样本数据集中的日期。