我很难在 R 中将字符转换为日期。
我有一个文件,其中日期为“2014-01”,其中第一个是年份,第二个是一年中的第几周。我想将其转换为日期类型。
我尝试过以下方法
z <- as.Date('2014-01', '%Y-%W')
print(z)
Output: "2014-12-05"
这不是我想要的。我想得到相同的格式,即。输出应该是“2014-01”,但现在是日期类型。
听起来你正在处理某种版本的年周,它以三种形式存在于
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
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 的“第一天”。