在 R 中将字符转换为“YYYY-WW”格式的日期

问题描述 投票:0回答:2

我很难在 R 中将字符转换为日期。

我有一个文件,其中日期为“2014-01”,其中第一个是年份,第二个是一年中的第几周。我想将其转换为日期类型。

我尝试过以下方法

z <- as.Date('2014-01', '%Y-%W')
print(z)

Output: "2014-12-05"

这不是我想要的。我想得到相同的格式,即。输出应该是“2014-01”,但现在是日期类型。

r date type-conversion
2个回答
2
投票

听起来你正在处理某种版本的年周,它以三种形式存在于

lubridate

week() 返回具有以下特征的完整 7 天周期数: 发生在该日期和 1 月 1 日之间,再加一。

isoweek() 返回 ISO 8601 系统中显示的星期, 它使用重复出现的闰周。

epiweek() 是美国 CDC 版本的流行病学周。如下: 与 isoweek() 的规则相同,但从周日开始。在该地区的其他地方 世界大会将于周一开始流行病学周, 这与 isoweek 相同。

Lubridate 具有从日期中提取这些数据的功能,但我不知道有一种内置的方法可以走向另一个方向,从一周到一个代表性的日子(共有 7 种可能)。如果您正在处理第一个版本,一个简单的方法是将

7 * (Week - 1)
添加到当年的 1 月 1 日。

library(dplyr)
data.frame(yearweek = c('2014-01', '2014-03')) %>%
  tidyr::separate(yearweek, c("Year", "Week"), convert = TRUE) %>%
  mutate(Date = as.Date(paste0(Year, "-01-01")) + 7 * (Week-1))

  Year Week       Date
1 2014    1 2014-01-01
2 2014    3 2014-01-15

0
投票

对于“epiweeks”或 MMWR 周,您可以使用

MMWRweek
套餐,如下所示:

data.frame(yearweek = c('2014-01', '2014-03')) |> 
  tidyr::separate(yearweek, c("Year", "Week"), convert = TRUE) |> 
  dplyr::mutate(epiweek_start_date = MMWRweek::MMWRweek2Date(Year, Week))
#>   Year Week epiweek_start_date
#> 1 2014    1         2013-12-29
#> 2 2014    3         2014-01-12

创建于 2024-12-05,使用 reprex v2.1.1

请注意,此解决方案假设您想要指定的 Epiweek 的“第一天”。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.