Используя неделю года, чтобы получить месяц через Lubridate в R

#r #date #lubridate

Вопрос:

Я хочу получить название месяца по номеру недели из следующих данных.

     cov$year_week <- c("2020-01", "2020-02", "2020-03", "2020-04", "2020-05", "2020-06", 
"2020-07", "2020-08", "2020-09", "2020-10")
 

Мне нужно преобразовать его как 2020-Jan, 2020-Jan, 2020-Jan....2020-Feb столбец в фрейме данных. Я использую lubridate это как выбор.

Ответ №1:

 library(lubridate)
library(tidyverse)

dummy <- data.frame(dumcol =seq.Date(as.Date('2020-01-01'),as.Date('2020-12-31'),by='week'))

dummy %>%
mutate(week=week(dumcol),months=month(dumcol,label=T)) %>% 
select(week,months)-> dummy

cov %>%
select(year_week) %>%
separate(year_week,c('year','week')) %>% 
mutate(week=as.numeric(week)) %>% 
left_join(dummy,by='week') %>% 
mutate(new_col=paste0(year,'-',months))
 

введите описание изображения здесь

примечание : месяцы на моем родном языке.

Комментарии:

1. извините, дорогой друг, моя неделя начинается с 0-53 в течение всего года. Итак, мне нужно получить December номер недели 53 . Ваш код будет работать, когда у меня в качестве номера будут месяцы, а не недели.

2. о, извините, позвольте мне исправить

3. @ambrishdhaka как насчет того, чтобы сейчас, вы можете проверить это еще раз ?

4. спасибо, я думаю, что номер недели фиксирован для каждого месяца независимо от года.

5. да, lubridate справится с этим, вы можете одобрить мой ответ, если ваша проблема устранена

Ответ №2:

Преобразование в дату и время

 cov <- c("2020-01", "2020-02", "2020-03", "2020-04", "2020-05", "2020-06", 
                   "2020-07", "2020-08", "2020-09", "2020-10")

strptime(paste0(cov,"-1"),"%Y-%W-%w")
 [1] "2020-01-06 CET" "2020-01-13 CET" "2020-01-20 CET" "2020-01-27 CET" "2020-02-03 CET"
 [6] "2020-02-10 CET" "2020-02-17 CET" "2020-02-24 CET" "2020-03-02 CET" "2020-03-09 CET"
 

Чтобы получить желаемый результат, вам просто нужно еще один вызов для форматирования

 format(strptime(paste0(cov,"-1"),"%Y-%W-%w"),"%Y-%b")
 [1] "2020-jan." "2020-jan." "2020-jan." "2020-jan." "2020-feb." "2020-feb." "2020-feb."
 [8] "2020-feb." "2020-mar." "2020-mar."
 

Примечание: я использовал %W и %w

 %w
Weekday as decimal number (0–6, Sunday is 0).

%W
Week of the year as decimal number (00–53) using Monday as the first day of week (and typically with the first Monday of the year as day 1 of week 1). The UK convention.
 

Комментарии:

1. @амбришдхака, возможно, Вас заинтересует %V ... Week of the year as decimal number (01–53) as defined in ISO 8601 .