Поскольку вы не спрашиваете о временной (почасовой) части ваших данных, лучше всего сохранять эти данные как объект Date.В противном случае вас может заинтересовать chron , который также имеет некоторые удобные функции, как вы увидите ниже.
Что касается ответа Conjugate Prior, вы должны сохранить свои данные даты как датуобъект.Поскольку ваши данные уже следуют формату по умолчанию ('гггг-мм-дд'), вы можете просто позвонить как.В противном случае вам придется указать формат строки.Я также хотел бы использовать as.character для вашего фактора, чтобы убедиться, что вы не получите ошибки в строке.Я знаю, что по этой причине у меня возникли проблемы с факторами (возможно, исправлено в текущей версии).
df.MHwind_load <- transform(df.MHwind_load, Date = as.Date(as.character(Date)))
Теперь вы бы неплохо создали функции-обертки, которые извлекают нужную вам информацию.Вы можете использовать transform , как я делал выше, чтобы просто добавить те столбцы, которые представляют месяцы, дни, годы и т. Д., И затем логически поднастроить их.В качестве альтернативы, вы можете сделать что-то вроде этого:
getMonth <- function(x, mo) { # This function assumes w/in single year vector
isMonth <- month(x) %in% mo # Boolean of matching months
return(x[which(isMonth)] # Return vector of matching months
} # end function
Или в краткой форме
getMonth <- function(x, mo) x[month(x) %in% mo]
Это просто компромисс между хранением этой информации (кадра преобразования) или обработкой ее, когдажелательно (используйте методы доступа).
Более сложным процессом является ваша потребность, скажем, в первый день месяца.Это не совсем сложно, хотя.Ниже приведена функция, которая будет возвращать все эти значения, но довольно просто просто установить подмножество отсортированного вектора значений для данного месяца и взять его первый.
getFirstDay <- function(x, mo) {
isMonth <- months(x) %in% mo
x <- sort(x[isMonth]) # Look at only those in the desired month.
# Sort them by date. We only want the first day.
nFirsts <- rle(as.numeric(x))$len[1] # Returns length of 1st days
return(x[seq(nFirsts)])
} # end function
Более простой альтернативой будет
getFirstDayOnly <- function(x, mo) {sort(x[months(x) %in% mo])[1]}
Я не создавал прототипы, так как вы не предоставили никаких образцов данных, но это тот тип подхода, который может помочь вам получить желаемую информацию.Это зависит от вас, чтобы выяснить, как включить их в свой рабочий процесс.Например, предположим, что вы хотите получить первый день для каждого месяца данного года (при условии, что мы рассматриваем только один год; вы можете создать обертки или предварительно обработать вектор до одного года).
# Return a vector of first days for each month
df <- transform(df, date = as.Date(as.character(date)))
sapply(unique(months(df$date)), # Iterate through months in Dates
function(month) {getFirstDayOnly(df$date, month)})
Вышеприведенное также может быть разработано как отдельная вспомогательная функция, использующая другую функцию доступа.Таким образом, вы создаете серию прямых, но лаконичных методов для получения нужной вам части информации.Затем вы просто сводите их вместе, чтобы создать очень простые и легкие для интерпретации функции, которые вы можете использовать в своих сценариях, чтобы получить точное определение того, что вы хотите, наиболее эффективным способом.
Вы сможете использовать приведенные выше примеры, чтобы выяснить, как создать прототипы других оболочек для доступа к информации о дате, которая вам требуется.Если вам нужна помощь по этим вопросам, не стесняйтесь спрашивать в комментарии.