当需要将一周分配到一个月中时,可以应用一年中第一周的规则,尽管ISO 8601并不考虑这种情况。(来源于
Wikipedia)
例如,2007年的第5周属于二月份,因为第5周的星期四是二月份的第一天。
我使用了
data.table
和
ISOweek
包。请查看示例,了解如何计算一周所属的月份,然后您可以按月进行任何聚合。
require(data.table)
require(ISOweek)
df2 <- data.table(Year = c("2007"), Week = c(1:12),
Measurement = c(rnorm(12, mean = 4, sd = 1)))
df2[, thursday_ISO := paste(Year, sprintf("W%02d", Week), 4, sep = "-")]
df2[, thursday_date := ISOweek2date(thursday_ISO)]
df2[, month := format(thursday_date, "%m")]
df2
Uwe提出计算年月字符串的建议。
# Compute year-month
df2[, yr_mon := format(ISOweek2date(sprintf("%s-W%02d-4", Year, Week)), "%Y-%m")]
df2
最后,您可以通过将中位数作为一列添加到新表中或进行聚合来完成操作。
df2[, median(Measurement), by = yr_mon]
df2[, median := median(Measurement), by = yr_mon]
df2
yr_mon := format(ISOweek2date(sprintf("%i-W%02i-4", Year, Week)))
。 - Uwelibrary(data.table); setDT(df2)[, median(Measurement), by = .(Yr_Mon = format(ISOweek::ISOweek2date(sprintf("%s-W%02d-4", Year, Week)), "%Y-%m"))]
。 - UweISOweek
的作者。非常感谢你提供这个包! - djhurio