看来互联网还没有为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天.
这是一种方法:
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)
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
单程:
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)