[英]How to convert week and year columns to a date column with lubridate in R
I have been following along with Hadley Wickham's R for data science book. 我一直在关注Hadley Wickham的R for data science book。 He has a lot of advice on using lubridate, but a lot of the functions assume that you have year, month, and day.
他在使用lubridate方面有很多建议,但是许多功能假定您有年,月和日。 How do you convert to date format when all you have is year and week using lubridate?
当您使用lubridate时,只有年份和星期时,如何转换为日期格式?
data.frame(
year = c(2015, 2015, 2016, 2016, 2016, 2016, 2016),
week = c(1, 20, 35, 49, 8, 4, 53)
)
#year week
#2015 1
#2015 20
#2016 35
#2016 49
#2016 8
#2016 4
#2016 53
You can do this with the weeks()
function in lubridate, if you want. 如果需要,可以使用lubridate中的week
weeks()
函数来执行此操作。 You just have to first set up a baseline date object. 您只需要首先设置一个基准日期对象。 I did that here using
str_c
from stringr. 我这样做,在这里使用
str_c
从stringr。
library(dplyr)
library(stringr)
my_dates <- tribble(
~year, ~week,
2015, 1,
2015, 20,
2016, 35,
2016, 49,
2016, 8,
2016, 4,
2016, 53
)
my_dates %>%
mutate(beginning = ymd(str_c(year, "-01-01")),
final_date = beginning + weeks(week))
#> # A tibble: 7 x 4
#> year week beginning final_date
#> <dbl> <dbl> <date> <date>
#> 1 2015 1 2015-01-01 2015-01-08
#> 2 2015 20 2015-01-01 2015-05-21
#> 3 2016 35 2016-01-01 2016-09-02
#> 4 2016 49 2016-01-01 2016-12-09
#> 5 2016 8 2016-01-01 2016-02-26
#> 6 2016 4 2016-01-01 2016-01-29
#> 7 2016 53 2016-01-01 2017-01-06
Arkun's answer is tidy and accurate but since you asked about using lubridate
I figured I'd add my two cents. Arkun的回答很整洁而准确,但是既然您问起使用
lubridate
我想我会加2美分。 You want to define New Year's day for each year in question and then advance the specified number of weeks from that. 您要为相关年份定义元旦,然后从中提前指定的周数。 This makes it much easier to account for leap years (which stymied my first effort to answer this question).
这样就更容易解释leap年了(这阻碍了我为回答这个问题所做的第一努力)。
library(tidyverse)
library(lubridate)
date_week <- data.frame(
year = c(2015, 2015, 2016, 2016, 2016, 2016, 2016, 1970),
week = c(1, 20, 35, 49, 8, 4, 53, 1)
)
date_week %>%
tbl_df() %>%
mutate(newyears = ymd(paste0(year,"-01-01"))) %>%
mutate(date = newyears + weeks(week))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.