将 Year/Week 转换为时间戳 (dd/mm/yyyy)

Convert Year/Week to Timestamp (dd/mm/yyyy)

我有一个如下所示的数据集:

Year Week Cases
2010 1 2
2010 4 3
2010 5 5
2010 6 1

我想将年-周列转换为单个时间戳列 (dd/mm/yyyy)。星期几可以是第一天或最后一天。
有没有简单的方法可以解决这个问题?

最好的, 丹尼尔

如果您将第 1 周算作从 1 月 1 日开始,您可以:

as.Date(paste(df$Year, 1, 1, sep = '-')) + 7 * (df$Week - 1)
#> [1] "2010-01-01" "2010-01-22" "2010-01-29" "2010-02-05"

如果您将第 1 周算作一年中的第一个星期一开始(根据 ISO 8601),那么您可以使用这个小函数:

year_week <- function(year, week) {
  as.Date(unlist((Map(function(y, w) {
    d <- which(lubridate::wday(as.Date(paste(y, 1, 1:7, sep = '-'))) == 2)
    as.Date(paste(y, 1, d, sep = '-')) + (w - 1) * 7}, y = year, w = week))),
    origin = '1970-01-01')
}

这将为您提供一年中第个星期一的日期,因此我们有:

year_week(df$Year, df$Week)
#> [1] "2010-01-04" "2010-01-25" "2010-02-01" "2010-02-08"

lubridate 中的 weeks 函数和 stringr 中的 str_c 函数可能会提供它:

df <- tribble(~year, ~week, 2010,1,2010,4,2010,5,2010,6)

df_tbl <- df %>% 
  mutate(beg = ymd(str_c(year, "-01-01")),
         date_var = beg + weeks(week))

df_tbl$date_var