Добавление числового года к числовому месяцу

#r #date

#r #Дата

Вопрос:

Я долго перебирал похожие вопросы, и я не могу найти ответ, который ищу.

У меня есть следующий фрейм данных с месяцами, происходящими в течение двух календарных лет.

Моя цель — представить месяцы как с 10-2019 по 09-2020.

В настоящее время у меня есть следующий фрейм данных:

 1    Oct  Running    30.86
2    Nov  Running     28.2
3    Dec  Running    38.44
4    Jan  Running    44.68
5    Feb  Running    22.32
6    Mar  Running    33.68
7    Apr  Running    34.59
8    May  Running    42.28
9    Jun  Running    33.89
10   Jul  Running    26.99
11   Aug  Running    40.07
12   Sep  Running    11.01
  

Я написал следующую функцию для преобразования сокращения месяца в числовое:

 month_to_number <- function(x) match(tolower(x), tolower(month.abb))
distance$month <- month_to_number(c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))
  

Но, очевидно, это не соответствует году, и это приводит к последовательному переупорядочению данных, нарушению порядка и несоответствию переменной данных. Это беспорядок:

  month activity distance
1      1  Running    30.86
2      2  Running     28.2
3      3  Running    38.44
4      4  Running    44.68
5      5  Running    22.32
6      6  Running    33.68
7      7  Running    34.59
8      8  Running    42.28
9      9  Running    33.89
10    10  Running    26.99
11    11  Running    40.07
12    12  Running    11.01
  

Итак, есть ли способ включить функцию, которая преобразовала бы аббревиатуру моего месяца в числовое значение с учетом данного года (т. Е. 2019, 2020)?

Ответ №1:

Может быть, вы можете попробовать :

 library(dplyr)
df %>%
  mutate(year_mon = match(V2, month.abb), 
         year_mon = paste(year_mon, 2019   
                          cumsum(c(FALSE, diff(year_mon) < 0)), sep = "-"))

#   V1  V2      V3    V4 year_mon
#1   1 Oct Running 30.86  10-2019
#2   2 Nov Running 28.20  11-2019
#3   3 Dec Running 38.44  12-2019
#4   4 Jan Running 44.68   1-2020
#5   5 Feb Running 22.32   2-2020
#6   6 Mar Running 33.68   3-2020
#7   7 Apr Running 34.59   4-2020
#8   8 May Running 42.28   5-2020
#9   9 Jun Running 33.89   6-2020
#10 10 Jul Running 26.99   7-2020
#11 11 Aug Running 40.07   8-2020
#12 12 Sep Running 11.01   9-2020
  

month.abb это встроенная константа в R с сокращениями названия месяца, которые мы используем с match , чтобы получить номер месяца. Мы начинаем добавлять год с 2019 года и увеличиваем год, когда номер месяца уменьшается по сравнению с предыдущим значением.

данные

 df <- structure(list(V1 = 1:12, V2 = c("Oct", "Nov", "Dec", "Jan", 
"Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep"), V3 = c("Running", 
"Running", "Running", "Running", "Running", "Running", "Running", 
"Running", "Running", "Running", "Running", "Running"), V4 = c(30.86, 
28.2, 38.44, 44.68, 22.32, 33.68, 34.59, 42.28, 33.89, 26.99, 
40.07, 11.01)), class = "data.frame", row.names = c(NA, -12L))
  

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

1. Отлично — спасибо! На данный момент мне этого достаточно для работы.