【发布时间】:2015-05-04 22:09:53
【问题描述】:
我想根据从单独数据框中定义的日期序列创建大量数据子集。例如,一个数据框将具有跨多年的日期和每日记录值。我在下面创建了一个假设的数据框。我想根据其他地方定义的开始和结束日期从这个数据框中进行各种子集。
set.seed(24)
df1 <- as.data.frame(matrix(sample(0:3000, 300*10, replace=TRUE), ncol=1))
df2 <- as.data.frame(seq(as.Date("2004/1/1"), by = "day", length.out = 3000))
Example <- cbind(df1,df2)
开始日期和结束日期对应于特定样本之前 1 年的序列。因此,如果我在 2006 年 5 月 18 日采样,我希望所有值都在 2005 年 5 月 17 日至 2006 年 5 月 17 日之间。我通过 Lubridate 包在下面创建了一个示例日期系列。
Sample_dates<- as.data.frame(dmy(c("18/05/2006","07/05/2010","01/04/2011",
"26/10/2006","24/09/2010","27/09/2011")))
End_dates <- (Sample_dates)-days(1)
Start_dates <- (End_dates)-years(1)
Sequence_dates <- cbind(Start_dates,End_dates)
colnames(Sequence_dates) <- c("Startdates", "Enddates")
随后,我应该根据第二个数据帧 (Sequence_dates) 中定义的日期序列,从原始数据帧(示例)中获得 6 个子集输出。实际上,存在更多的样本日期,因此在一段编码中识别这些开始和结束日期的函数比手动选择每个开始和结束日期更可取。我认为循环函数似乎很有可能,我根据在其他地方找到的类似(更复杂)的帖子尝试了以下操作。 For() loop to ID dates that are between others and calculate a mean value。
for (i in 1:nrow(Sequence_dates)){
Selected_dates[i] = is.between(Sequence_dates$Startdates[i], Discharge_dates$Enddates[i])
}
但是,R 无法识别 is.between,我很欣赏代码可能很草率,因为我以前从未执行过循环。对此的任何帮助将不胜感激!
詹姆斯
【问题讨论】:
-
您需要从您链接的问题中复制
is.between的函数定义并运行它;它不是 R 的基本功能之一,而是由该用户定义的。另一件事:您应该初始化Selected_dates <- list()并使用Selected_dates[[i]] <-分配给它,因为您可能有多个日期。 (Selected_dates[i]只能包含一个值。)