Изменение названия месяца и года на дату или POSIXct - PullRequest
1 голос
/ 31 января 2020

У меня есть фрейм данных

             date     df discharge cfs   green discharge cfs   north discharge cfs
1   December 2018        2520.1394           171.69667           338.81082
2   November 2018        3475.1023           239.00738           422.19063
3    October 2018        1863.4778           121.91720           200.94455
4      April 2019        3244.5356           260.38507           543.34792
5     August 2019         335.5074            14.95659            29.29938
6   February 2019        1631.3048            94.35956           198.19885
7    January 2019        1767.6266           132.69408           247.54493
8       July 2019         496.9439            26.37159            57.50114
9       June 2019        1097.2101            64.17292           143.40153
10     March 2019        1081.8046            80.32419           167.57954
11       May 2019        1507.8582           100.81569           236.58269
12  November 2019        2842.3542           284.72917           586.75000
13   October 2019         544.3002            34.67999            83.58193
14 September 2019         295.7200            11.37943            26.25823

, и я хочу изменить столбец "дата" на 12-2018, 11-2018 и т. Д. формат выглядит следующим образом:

       date     df discharge cfs   green discharge cfs   north discharge cfs
1   12-2018        2520.1394           171.69667           338.81082
2   11-2018        3475.1023           239.00738           422.19063
3   10-2018        1863.4778           121.91720           200.94455
4   04-2019        3244.5356           260.38507           543.34792
5   08-2019         335.5074            14.95659            29.29938
6   02-2019        1631.3048            94.35956           198.19885
7   01-2019        1767.6266           132.69408           247.54493
8   07-2019         496.9439            26.37159            57.50114
9   06-2019        1097.2101            64.17292           143.40153
10  03-2019        1081.8046            80.32419           167.57954
11  05-2019        1507.8582           100.81569           236.58269
12  11-2019        2842.3542           284.72917           586.75000
13  10-2019         544.3002            34.67999            83.58193
14  09-2019         295.7200            11.37943            26.25823

В настоящее время столбец «дата» находится в «символьном» формате. Как я могу изменить это на дату или формат POSIXct, чтобы он выглядел так, как показано выше? Спасибо.

Ответы [ 2 ]

1 голос
/ 31 января 2020

Мы можем использовать as.yearmon для преобразования в yearmon класс, а затем изменить данные format

library(zoo)
df1$date <- format(as.yearmon(df1$date, "%B %Y"), "%m-%Y")
df1$date
#[1] "12-2018" "11-2018" "10-2018" "04-2019" "08-2019" "02-2019" "01-2019" "07-2019" "06-2019" "03-2019" "05-2019" "11-2019" "10-2019"
#[14] "09-2019"

df1 <- structure(list(date = c("December 2018", "November 2018", "October 2018", 
"April 2019", "August 2019", "February 2019", "January 2019", 
"July 2019", "June 2019", "March 2019", "May 2019", "November 2019", 
"October 2019", "September 2019"), df_discharge_cfs = c(2520.1394, 
3475.1023, 1863.4778, 3244.5356, 335.5074, 1631.3048, 1767.6266, 
496.9439, 1097.2101, 1081.8046, 1507.8582, 2842.3542, 544.3002, 
295.72), green_discharge_cfs = c(171.69667, 239.00738, 121.9172, 
260.38507, 14.95659, 94.35956, 132.69408, 26.37159, 64.17292, 
80.32419, 100.81569, 284.72917, 34.67999, 11.37943), 
north_discharge_cfs = c(338.81082, 
422.19063, 200.94455, 543.34792, 29.29938, 198.19885, 247.54493, 
57.50114, 143.40153, 167.57954, 236.58269, 586.75, 83.58193, 
26.25823)), class = "data.frame", row.names = c("1", "2", "3", 
"4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14"))
0 голосов
/ 31 января 2020

В базе R мы можем вставить произвольную дату, преобразовать в объект даты и затем отформатировать

format(as.Date(paste0('1', df$date), '%d %B %Y'), '%m-%Y')

Другой вариант с регулярным выражением и использованием встроенного вектора month.name может быть

with(df, paste(match(sub('\\s\\d+', '', date), month.name), 
                     sub('.*\\s+', '', df$date), sep = '-'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...