Как создать столбец полной даты, используя строку символов «Month_Year», и объединить три разных фрейма данных, упорядоченных по столбцу даты в R - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть три фрейма данных - зима, весна и лето за 2014-2018 годы.Зимние месяцы январь, февраль, ноябрь, декабрь.Весенние месяцы с марта по июнь.Летние месяцы с июля по октябрь.У меня есть ежедневные данные за все месяцы для всех сезонов, но есть столбец «Дата» в строке символов «Month_Year».У меня вопрос, как мне преобразовать символьную строку 'Month_Year' в формат полной даты '% Y-% m-% d'?

Я могу преобразовать Month_Year в yearmon с помощью функции as.yearmonа затем преобразовать его в дату, используя функцию as.Date.Но он возвращает первый день месяца для каждого дня месяца.

Ниже приведен пример воспроизводимого минимума:

df1 <- data.frame(rep("July_2014",31))
names(df1) <- 'date'
df1$fulldate <-  as.yearmon(df1$date, "%b_%Y") 
df1$fulldate_Date <- as.Date(as.yearmon(df1$fulldate, "%m-%Y"))

Аналогично, у меня будет три разных фрейма данных для трех разныхсезоны на 2014-2018 годы.Наконец, мне нужно объединить все три фрейма данных и создать один непрерывный временной ряд с 2014-01-01 по 2018-10-31

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Вот решение с использованием пакета dplyr.Он вставляет порядковый номер в столбец month_year, а затем преобразует его в объект Date.Это предполагает, что фрейм данных находится в хронологическом порядке по дням месяца.

#test data
df1 <- data.frame(month=c(rep("June_2014",30), rep("July_2014",31)))

library(dplyr)
#Paste day onto the month year
answer<- df1 %>% group_by(month) %>% mutate(date = paste(month, 1:n())) 
#convert to date
answer$date<-as.Date(answer$date, "%b_%Y %d")

# month     date      
# <fct>     <date>    
# 1 June_2014 2014-06-01
# 2 June_2014 2014-06-02
# 3 June_2014 2014-06-03
# 4 June_2014 2014-06-04
# 5 June_2014 2014-06-05
0 голосов
/ 05 декабря 2018

make_seq принимает дату, которая является первым в месяце, и выводит последовательность дат до конца месяца.Примените это с помощью ave и избавьтесь от ненужных столбцов.rbind может использоваться для создания одного фрейма данных из нескольких, имеющих одинаковые имена столбцов.Столбцы не должны быть факторами, если они не имеют одинаковые уровни.

make_seq <- function(x) seq(x[1], as.Date(as.yearmon(x[1]), frac = 1), by = "day")
transform(df1, Date = ave(fulldate_Date, date, FUN = make_seq))[c("fulldate", "Date")]

, что дает:

   fulldate       Date
1  Jul 2014 2014-07-01
2  Jul 2014 2014-07-02
3  Jul 2014 2014-07-03
4  Jul 2014 2014-07-04
5  Jul 2014 2014-07-05
6  Jul 2014 2014-07-06    
... etc ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...