Кажется, что Интернет еще не ответил на этот вопрос для R:
Если у меня есть дата. Скажем 20-е марта: as.Date( "2015-03-20" ) как я могу получить в R, в предыдущее воскресенье? то есть в приведенном выше примере, как .Date( "2015-03-15" ).
Кажется, что Интернет еще не ответил на этот вопрос для R:
Если у меня есть дата. Скажем 20-е марта: as.Date( "2015-03-20" ) как я могу получить в R, в предыдущее воскресенье? то есть в приведенном выше примере, как .Date( "2015-03-15" ).
Вот один из подходов:
d <- as.Date("2015-03-18")
prev.days <- seq(d-6,d,by='day')
prev.days[weekdays(prev.days)=='Sunday']
# [1] "2015-03-15"
Прочитав документацию lubridate, я нашел ответ.
library(lubridate)
date <- as.Date("2015-03-20")
previous_sunday <- floor_date(date, "week")
Чтобы получить предыдущий понедельник, tues и т.д., просто добавьте необходимое количество дней: (в понедельник)
day(date)<-day(date)+1
и вычитайте 7 дней, если оно больше первоначальной даты.
Один из способов:
d<-as.Date("2015-03-20")
d-as.POSIXlt(d)$wday
## [1] "2015-03-15"
Там также более хакерский способ, используя тот факт, что даты представлены как целые числа с нулевым днем, являющимся четвергом (1 января 1970 года):
d-((as.numeric(d)+4)%% 7)
## [1] "2015-03-15"
cut(date_var, breaks='week', start.on.monday = F)
Это работает для меня. Он доступен в базе r и должен быть быстрее. Перерывы могут быть использованы для поиска начала дня, недели, месяца, квартала, года.
Читать? Вырезать и? Вырезать. Дата
Sys.Date()
[1] "2017-12-23"
cut(Sys.Date(), breaks = 'week', start.on.monday = F)
[1] 2017-12-17 Уровни: 2017-12-17
cut(Sys.Date(), breaks = 'month')
[1] 2017-12-01 уровни: 2017-12-01
cut(Sys.Date(), breaks = 'quarter')
[1] 2017-10-01 уровни: 2017-10-01
cut(Sys.Date(), breaks = 'year')
[1] 2017-01-01 Уровни: 2017-01-01