我在[r]数据框中有几年的数据(仅用于工作日(无周末或节假日)),并希望找出每个月第二个和第五个工作日的数据之间的差异。因此,解决方案需要遍历列表,确定第2个和第5个工作日,获取对应日期的数据和完整日期,然后找出差异。

数据如下:

1/19/1990  1.22

1/20/1990  1.25

1/23/1990  1.26   ## (Gap in date is weekend)

...

2/1/1990   1.34

2/2/1990   1.36

2/5/1990   1.22   ## (Gap in date is weekend)

我试过使用dateTime(),但周末和节假日没有障碍。任何建议,将不胜感激,谢谢。

最佳答案

我假设在第2和第5个工作日之前,您所指的是每个月的数据中实际存在的第2和第5天的数据。如果那是问题,则其如下。我们读入数据并将第一列转换为"Date"类。然后,我们按月份汇总数据,得出所需的差额。

Lines <- "1/19/1990 1.22
1/20/1990 1.25
1/23/1990 1.26
1/24/1990 1.26
1/25/1990 1.26
1/26/1990 1.26
2/1/1990 1.34
2/2/1990 1.36
2/5/1990 1.22
2/6/1990 1.22
2/7/1990 1.22
2/8/1990 1.22"

DF <- read.table(text = Lines, col.names = c("Date", "Value"))
DF$Date <- as.Date(DF$Date, "%m/%d/%Y")
aggregate(DF$Value, list(ym = format(DF$Date, "%Y-%m")),
   function(x) if (length(x) >= 5) x[5] - x[2] else NA)

使用zoo和chron可以完全通过read.zoo完成:
library(zoo)
library(chron)
read.zoo(text = Lines, FUN = chron, FUN2 = as.yearmon,
  aggregate =  function(x) if (length(x) >= 5) x[5] - x[2] else NA)

更新自从第一次编写text=read.table参数以来,R中就添加了read.zoo,并且答案也已更新为使用它。

关于r-查找工作日之间的差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4559175/

10-12 17:11