R将13个数据点转换为每月

时间:2016-11-07 08:36:38

标签: r aggregate

从1月20日开始,我有13个销售点,间隔为28天。这给了我13个数据点。如何将其转换为R

的月销售额(近似值)

1 个答案:

答案 0 :(得分:1)

你可以,例如以下列方式组合aggregate函数和months函数。 months函数返回给定日期的月份。在这种情况下,aggregate函数会将每个月的销售额相加。

# Create some toy data
set.seed(1) 
df <- data.frame(date = as.Date("2016-01-20") + 0:12*20,
                 sales = runif(13))
head(df)
#         date      sales
#1  2016-01-20 0.26550866
#2  2016-02-09 0.37212390
#3  2016-02-29 0.57285336
#4  2016-03-20 0.90820779
#5  2016-04-09 0.20168193
#6  2016-04-29 0.89838968

# Create the month names and numbers
df$month_num <- format(df$date, format = "%m")
df$month_lex <- months(df$date)
head(df)
#         date      sales month_num month_lex
#1  2016-01-20 0.26550866        01    januar
#2  2016-02-09 0.37212390        02   februar
#3  2016-02-29 0.57285336        02   februar
#4  2016-03-20 0.90820779        03     marts
#5  2016-04-09 0.20168193        04     april
#6  2016-04-29 0.89838968        04     april

# Aggregate by month number to get correct sorting
aggregate(sales ~ month_lex*month_num, sum, data = df)
#  month_lex month_num      sales
#1    januar        01 0.26550866
#2   februar        02 0.94497726
#3     marts        03 0.90820779
#4     april        04 1.10007162
#5       maj        05 0.94467527
#6      juni        06 1.28991184
#7      juli        07 0.06178627
#8    august        08 0.38253133
#9 september        09 0.68702285

您可以在month_lex*电话中遗漏aggregate,但不会传递月份名称。

请忽略我是丹麦系统的事实。如果您想要更具体的答案,我想您应该提供一个显示您的输入和期望输出的最小数据示例。

编辑:更新以容纳@UweBlock评论。