R语言:按日期分层汇总数据,揭示数据背后的故事

博主:itopmitopm 2024-04-27 21:20:01 131

今天的内容不复杂,至少我认为不算太复杂,因为这里引入了一个现成的工具包,zoo(时间序列加强)

 R语言:按日期分层汇总数据,揭示数据背后的故事

昨天列了老长老长的一大截有关日期和时间格式的样式,为啥咧?主要是因为R软件默认的基础包不能自动识别日期,需要咱告诉它这个日期列长神马样子

但是,zoo包在这件事情上比较充分地达到了挽尊的目的,因为它在一定程度上,可以在表格读取的阶段就自行识别出部分比较规整的日期格式,只是达到这一结果有一个小小的先决条件,就是得把日期这一列信息放在整个csv表的第一列

需要的表格和日期列的位置我提前调好了,来熟悉下操作:

首先装上zoo包,该install的、library的步骤一个别少

然后使用read.csv.zoo函数,这里支持传入read.csv过程的参数

Data <- read.csv.zoo("Delivery.csv", stringsAsFactors = FALSE)

 R语言:按日期分层汇总数据,揭示数据背后的故事

虽然读取时跳出了报警信息,不过这主要是因为我用的表格中日期序列是有重复的,读出来的表格倒是没有问题,自动把第一列的日期认了出来

当然,这不是唯一的解决方案,在不用zoo的情况下,ts函数也能帮忙完成这种识别,但个人感觉没有zoo好用

 R语言:按日期分层汇总数据,揭示数据背后的故事

那亲们也许会有点好奇,费这么些力气硬是转成R能够识别的时间序列有啥用咧?接下来,请出一个有点意思的工具,函数cut

x1 <- cut(time(Data), "month")

x2 <- cut(time(Data), "week")

 R语言:按日期分层汇总数据,揭示数据背后的故事

这玩意儿处理zoo格式的表挺快的,按周按月份一下子就能切分出来

有了切分好的时间轴,汇总起来就方便了,毕竟aggregate也能支持zoo格式嘛

(刚刚试了好多遍都挂了,后来才发现是因为金额列里有个千分位符识别不出来,晕菜玩意儿~~~)

#前面这几步是为了把表格里的文本型转回数值

c1 <- as.vector(Data$数量)

Qty <- -as.numeric(c1)

c2 <- as.vector(Data$本位币金额)

Value <- -as.numeric(gsub(",","",c2))

NewData <- zoo(data.frame(Qty, Value), time(Data))

#接下来才是aggregate

SumbyMonth <- aggregate(NewData, as.Date(x1), sum)

SumbyWeek <- aggregate(NewData, as.Date(x2), sum)

 R语言:按日期分层汇总数据,揭示数据背后的故事

如果想要分类汇总的情况比较复杂,可以用as.Date转好时间轴再套用公式接口

Type <- as.factor(as.vector(Data$物料))

Week <- as.Date(x2)

SSWeek <- aggregate(cbind(Qty, Value) ~ Week + Type, data = NewData, sum)

 R语言:按日期分层汇总数据,揭示数据背后的故事

最后出来的成品大概是这样

write.csv(file = "WeeklySum.csv", SSWeek)

 R语言:按日期分层汇总数据,揭示数据背后的故事

嗯,还算可以,先这样吧

The End

本站部分内容来源于互联网,仅供学习交流之用。如有侵犯您的版权,请及时联系我们,我们将尽快处理。