我在[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/