如何在R中找到上周日

pat*_*_ai 12 r date

看来互联网还没有为R回答这个问题:

如果我有约会.比如3月20日:as.Date("2015-03-20")我如何在R上一个星期天得到?即,在上面的例子中,as.Date("2015-03-15").

pat*_*_ai 18

通过阅读rubridate文档,我找到了答案.

library(lubridate)
date <- as.Date("2015-03-20")
previous_sunday <- floor_date(date, "week")
Run Code Online (Sandbox Code Playgroud)

要获得之前的星期一,星期二等,只需添加所需的天数:(星期一)

day(date)<-day(date)+1
Run Code Online (Sandbox Code Playgroud)

如果它大于原始日期,则减去7天.


Mar*_*pov 8

这是一种方法:

d <-  as.Date("2015-03-18")
prev.days <- seq(d-6,d,by='day')
prev.days[weekdays(prev.days)=='Sunday']
# [1] "2015-03-15"
Run Code Online (Sandbox Code Playgroud)


Sum*_*n C 7

cut(date_var, breaks='week', start.on.monday = F)
Run Code Online (Sandbox Code Playgroud)

这对我有用。它在基数 r 中可用,并且肯定会更快。 休息时间可用于查找日、周、月、季度、年的开始。

阅读 ?cut & ?cut.Date

Sys.Date()
Run Code Online (Sandbox Code Playgroud)

[1] 《2017-12-23》

cut(Sys.Date(), breaks = 'week', start.on.monday = F)
Run Code Online (Sandbox Code Playgroud)

[1] 2017-12-17 级别:2017-12-17

cut(Sys.Date(), breaks = 'month')
Run Code Online (Sandbox Code Playgroud)

[1] 2017-12-01 级别:2017-12-01

cut(Sys.Date(), breaks = 'quarter')
Run Code Online (Sandbox Code Playgroud)

[1] 2017-10-01 级别:2017-10-01

cut(Sys.Date(), breaks = 'year')
Run Code Online (Sandbox Code Playgroud)

[1] 2017-01-01 级别:2017-01-01

  • 在我看来,这很像规范的做法。 (2认同)

mri*_*rip 5

单程:

d<-as.Date("2015-03-20")
d-as.POSIXlt(d)$wday
## [1] "2015-03-15"
Run Code Online (Sandbox Code Playgroud)

还有一种更骇人听闻的方式,使用日期表示为整数的事实,第 0 天是星期四(1970 年 1 月 1 日):

d-((as.numeric(d)+4)%% 7)
## [1] "2015-03-15"
Run Code Online (Sandbox Code Playgroud)