#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. Отлично — спасибо! На данный момент мне этого достаточно для работы.