【发布时间】:2015-08-28 09:56:21
【问题描述】:
我有一个日期列表 (df2) 和一个单独的数据框,其中包含每周日期和当天的测量值 (df1)。我需要的是在采样日期(df2)之前的一年内输出一个数据框,并以此进行测量。
eg1 <- data.frame(Date=seq(as.Date("2008-12-30"), as.Date("2012-01-04"), by="weeks"))
eg2 <- as.data.frame(matrix(sample(0:1000, 79*2, replace=TRUE), ncol=1))
df1 <- cbind(eg1,eg2)
df2 <- as.Date(c("2011-07-04","2010-07-28"))
我之前问过的一个类似问题 (Outputting various subsets from one data frame based on dates) 已通过此功能用每日数据(行数平衡)得到了有效回答...
output <- as.data.frame(lapply(df2, function(x) {
df1[difftime(df1[,1], x - days(365)) >= 0 & difftime(df1[,1], x) <= 0, ]
}))
但是,对于每周数据,行数奇数意味着这是不可能的。删除“as.data.frame”函数后,代码可以工作,但我得到了一个数据框列表。 我想做的是将一行 NA 附加到那些包含较少观察值的数据帧中,以便我可以输出一个数据帧,这样我就可以应用函数而忽略 NA 值,例如......
df2 <- as.Date(c("2011-01-04","2010-07-28"))
output <- as.data.frame(lapply(df2, function(x) {
df1[difftime(df1[,1], x - days(365)) >= 0 & difftime(df1[,1], x) <= 0, ]
}))
col <- c(2,4)
output_two <- output[,col]
Mean <- as.data.frame(apply(output_two,2,mean), na.rm = TRUE)
【问题讨论】: