如何解决按不规则时间间隔对数据进行分组和求和R 语言
我正在查看这里的 stackoverflow 帖子:R: Count Number of Observations within a group
在这里,每日数据按月间隔(以及周间隔)创建和汇总/分组:
library(xts)
library(dplyr)
#create data
date_decision_made = seq(as.Date("2014/1/1"),as.Date("2016/1/1"),by="day")
date_decision_made <- format(as.Date(date_decision_made),"%Y/%m/%d")
property_damages_in_dollars <- rnorm(731,100,10)
final_data <- data.frame(date_decision_made,property_damages_in_dollars)
# weekly
weekly = final_data %>%
mutate(date_decision_made = as.Date(date_decision_made)) %>%
group_by(week = format(date_decision_made,"%W-%y")) %>%
summarise( total = sum(property_damages_in_dollars,na.rm = TRUE),Count = n())
# monthly
final_data %>%
mutate(date_decision_made = as.Date(date_decision_made)) %>%
group_by(week = format(date_decision_made,"%Y-%m")) %>%
summarise( total = sum(property_damages_in_dollars,Count = n())
似乎 R (https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/format) 中的“格式”语句被用来指示计算机在某个固定间隔内对数据进行“分组和求和”。
我的问题:有没有办法“指示”计算机以不规则的间隔“分组和求和”?例如。按 11 天周期,按 3 个月周期,按 2 年周期? (我猜3个月可以写成90天……2年可以写成730天)。
这可能吗?
谢谢
解决方法
您可以使用 lubridate 的 ceiling_date
/floor_date
以不规则的间隔创建组。
library(dplyr)
library(lubridate)
final_data %>%
mutate(date_decision_made = as.Date(date_decision_made)) %>%
group_by(group = ceiling_date(date_decision_made,'11 days')) %>%
summarise(amount = sum(property_damages_in_dollars))
您还可以指定间隔,例如 ceiling_date(date_decision_made,'3 years')
或 ceiling_date(date_decision_made,'2 months')
。
使用 data.table
library(data.table)
library(lubridate)
setDT(final_data)[,.(amount = sum(property_damages_in_dollars)),.(group = ceiling_date(as.IDate(date_decison_made),"11 days"))]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。