首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中将周列和年份列转换为具有lubridate的日期列

如何在R中将周列和年份列转换为具有lubridate的日期列
EN

Stack Overflow用户
提问于 2017-07-28 02:41:18
回答 2查看 2.3K关注 0票数 4

我一直跟随哈德利韦翰的R数据科学书籍。他在使用润滑油方面有很多建议,但很多功能假设你有年、月和日。你如何转换成日期格式,当你所有的是使用润滑油的年份和星期?

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-28 03:09:11

如果您愿意,可以使用lubridate中的weeks()函数来完成这一任务。您只需首先设置一个基准日期对象。我在这里使用stringr的str_c实现了这一点。

代码语言:javascript
复制
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
票数 6
EN

Stack Overflow用户

发布于 2017-07-28 03:12:47

阿肯的答案是整洁和准确的,但既然你问到使用lubridate,我想我会加我的两分钱。您要定义每年的元旦日,然后从该日期起提前指定的周数。这使我更容易解释闰年(这阻碍了我第一次回答这个问题)。

代码语言:javascript
复制
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))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45363997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档