r - 使用仅包含 ISO 周的数据集将 ISO 周聚合为几个月

标签 r date

我的数据位于一个数据框中,其结构如下:

df2 <- data.frame(Year = c("2007"), Week = c(1:12), Measurement = c(rnorm(12, mean = 4, sd = 1)))

不幸的是,我没有每次测量的完整日期(例如缺少天数),只有年份和周(这些是 ISO 周)。

现在我想将一个月的测量值的中位数(例如特定年份每月的每周测量值)聚合到一个新列“月份”中。在没有确切的测量日期的情况下,我没有找到一种方便的方法来做到这一点。非常感谢您的任何意见!

最佳答案

当需要将一周分配给一个月时,可能会应用一年中第一周的规则,尽管 ISO 8601 不考虑这种情况。 ( Wikipedia )

例如,2007 年的第 5 周属于 2 月,因为第 5 周的星期四是 2 月 1 日。

我正在使用 data.tableISOweek 包。请参阅如何计算一周中的月份的示例。然后您可以按月进行任何聚合。

require(data.table)
require(ISOweek)

df2 <- data.table(Year = c("2007"), Week = c(1:12),
                  Measurement = c(rnorm(12, mean = 4, sd = 1)))

# Generate Thursday as year, week of the year, day of week according to ISO 8601
df2[, thursday_ISO := paste(Year, sprintf("W%02d", Week), 4, sep = "-")]

# Convert Thursday to date format
df2[, thursday_date := ISOweek2date(thursday_ISO)]

# Compute month
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

关于r - 使用仅包含 ISO 周的数据集将 ISO 周聚合为几个月,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46319137/

相关文章:

R matlab 包 : why is repmat inconsistent?

java - 标准化 UTC 日期

MySQL显示整个月的所有日期

r - data.table/data.frame rbind 无法正常工作

r - 使 R 中的嵌套 for 循环更高效

r - Sweave 无法加载 R 包

java - 日期格式不正确

linux - 无效日期 | linux sh 脚本

php - 使用 d-m-Y 而不是 m-d-Y 初始化 DateTime PhP

r - 使用 roxygen2 记录新的 "+"S3 方法时出现问题