R时间序列数据,仅包括工作日的每日数据。

4
我将使用以下代码:

我正在使用以下代码:

dates<-seq(as.Date("1991/1/4"),as.Date("2010/3/1"),"days")

然而,我只想保留工作日,如何实现?(假设1991年1月4日是星期一,我想排除:1991年6月4日和1991年7月4日。对于每个星期同样适用。)

感谢你的帮助。


好的,您是指要排除周末吗?请查看函数weekdays - joran
3个回答

7

这个方案对你有用吗?(注意,需要安装timeDate包)

# install.packages('timeDate')
require(timeDate)

# A ’timeDate’ Sequence
tS <- timeSequence(as.Date("1991/1/4"), as.Date("2010/3/1"))
tS

# Subset weekdays
tW <- tS[isWeekday(tS)]; tW
dayOfWeek(tW)

@BrunoGG,欢迎您。当您的问题得到解决时,请重新编号以标记您的问题已解决。 - Eric Fail

7
您输入的日期有误。为了使用以1991年1月4日(星期一)为基础的YYYY/DD/MM输入模式,您需要在as.Date函数中提供一个格式字符串。
因此,如果您希望排除周末,完整的解决方案如下:
 X <- seq( as.Date("1991/1/4", format="%Y/%m/%d"), as.Date("2010/3/1", format="%Y/%m/%d"),"days")
weekdays.X <- X[ ! weekdays(X) %in% c("Saturday", "Sunday") ]  
        # negation easier since only two cases in exclusion
        # probably do not want to print that vector to screen.
str(weekdays.X)

关于你的评论,我无法复现。我得到了:

> table(weekdays(weekdays.X) )

   Friday    Monday  Thursday   Tuesday Wednesday 
     1000      1000       999       999       999 

谢谢DWin!不过,我似乎得到的是包括周末在内的每日数据。 - BrunoGG
1
@BrunoGG,请检查一下 weekdays(X) 的输出。你可能得到了另一种语言的星期几。 - Slug Pue

5

我在查找工作日函数时遇到了这个问题,由于楼主要求“工作日”而不是“工作日”,并且timeDate还具有isBizday函数,因此本答案使用了它。

# A timeDate Sequence
date.sequence <- timeSequence(as.Date("1991-12-15"), as.Date("1992-01-15"));  # a short example period with three London holidays
date.sequence;

# holidays in the period
years.included <- unique( as.integer( format( x=date.sequence, format="%Y" ) ) );
holidays <- holidayLONDON(years.included)  #  (locale was not specified by OP in question nor in profile, so this assumes for example: holidayLONDON; also supported by timeDate are: holidayNERC, holidayNYSE, holidayTSX & holidayZURICH)

# Subset business days
business.days <- date.sequence[isBizday(date.sequence, holidays)]; 
business.days

假期期间非常有帮助。有没有编制自定义假日列表的建议,例如感恩节后一天等? - Sescopeland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接