Есть ли функция, которая могла бы перечислить мне все даты в указанном месяце (годе)
то есть:
proper_function("January",2019)
результат
[1] "2019-01-01" "2019-01-02" "2019-01-03" "2019-01-04" "2019-01-05" "2019-01-06" "2019-01-07"
[8] "2019-01-08" "2019-01-09" "2019-01-10" "2019-01-11" "2019-01-12" "2019-01-13" "2019-01-14"
[15] "2019-01-15" "2019-01-16" "2019-01-17" "2019-01-18" "2019-01-19" "2019-01-20" "2019-01-21"
[22] "2019-01-22" "2019-01-23" "2019-01-24" "2019-01-25" "2019-01-26" "2019-01-27" "2019-01-28"
[29] "2019-01-29" "2019-01-30" "2019-01-31"
Я мог бы написать простую программу, поскольку, кроме февраля, каждый месяц имеет фиксированные даты для любого года, но я полагаю, что в некоторых базовых пакетах должна быть какая-то существующая функция.
Я думаю, что понял вашу идею, удалив NA для недопустимой даты в течение месяца, но %b можно изменить на %B, чтобы заполнить мою исходную информацию «Январь», а не «Ян» @nicola
Написать его не составит труда. Используя только базу R, вы можете сделать
proper_function <- function(month, year) {
start <- as.Date(paste0("01", month,year), "%d%B%Y")
end <- seq(start, length.out = 2, by = "month")[2]
seq(start, end - 1, by = "day")
}
proper_function("June",2019)
# [1] "2019-06-01" "2019-06-02" "2019-06-03" "2019-06-04" "2019-06-05"....
# "2019-06-25" "2019-06-26" "2019-06-27" "2019-06-28" "2019-06-29" "2019-06-30"
proper_function("February",2019)
#[1] "2019-02-01" "2019-02-02" "2019-02-03" "2019-02-04" "2019-02-05" ....
# "2019-02-25" "2019-02-26" "2019-02-27" "2019-02-28"
Вы можете решить, какой формат будет принимать ваш ввод, и соответствующим образом изменить параметр format
в as.Date
.
Таким образом, вы получаете начальную дату из моей информации, затем находите первую дату следующего месяца, таким образом, получаете конечную точку этого месяца, затем получаете последовательность в соответствии с первой и последней датой месяца, идея ясна~ Ключевой метод вторая строка, которая спасает вас от выяснения, сколько дат в каждом месяце. Если нет прямого метода, я думаю, что этот работает
@cloudscomputes вы можете немного оптимизировать (?) или сэкономить несколько нажатий клавиш, чтобы получить end
, используя month
из lubridate
, но я не знаю прямой функции.
Вы можете использовать смазочный пакет. Вам просто нужно указать месяц в следующем формате:
proper_function <- function(x) {
x <- as_date(x)
y <- days_in_month(x)
as_date(1:y, origin = x-1)
}
x <- c("2012-02-01")
proper_function(x)
[1] "2012-02-01" "2012-02-02" "2012-02-03" "2012-02-04" "2012-02-05" "2012-02-06" "2012-02-07" "2012-02-08"
[9] "2012-02-09" "2012-02-10" "2012-02-11" "2012-02-12" "2012-02-13" "2012-02-14" "2012-02-15" "2012-02-16"
[17] "2012-02-17" "2012-02-18" "2012-02-19" "2012-02-20" "2012-02-21" "2012-02-22" "2012-02-23" "2012-02-24"
[25] "2012-02-25" "2012-02-26" "2012-02-27" "2012-02-28" "2012-02-29"
Попробуйте
proper_function<-function(month,year) {x<-as.Date(paste(1:31,month,year),"%d %b %Y");x[!is.na(x)]}
.