基于日期的数据框过滤器行列表

List of Dataframes filter row based on Date

我目前正在处理数据帧列表。
实际上,我有大约一百个代表某种预测的 csv 文件,其中做出预测的日期在第一行,之后的行包含预测值。数据可能如下所示:

2010/04/15 10:12:51 #Date of the forecast
2010/05/02          2372  #Date for which the forecast was made and the value assigned
2010/05/09          2298

2009/04/15 10:09:13 #another forecast
....
2010/05/02          2298 #also predicts for 2010/05/02

正如您可能猜到的那样,预测确实会提前相当长一段时间(例如 5 年)预测值,这意味着对日期 2010/05/02 的预测不仅是在 2010/04/15 做出的,也是在 2009/ 04/15等等(其实每周都做预测)。
我想比较指定日期(例如 2010/05/02)的预测值如何随时间变化。
现在,我读入了所有作为数据框的 .csv 数据,并将每个结果数据框保存在列表中。
(可悲的是,做出预测的日期 lost-I 希望能够用相应的日期命名列表元素,但还没有想出如何做 this-still,我很确定我会在某处找到一些东西,这里不是主要问题)

这就是问题标题的由来:我想知道如何按行值过滤数据框列表。
因此,我希望能够使用一个函数:function(2010/05/02) 并作为结果获取列表中每个元素的行(列表中的每个数据框),其中日期为 2010/05/02 .

在这种情况下,我想得到:

2010/05/02 2372
2010/05/02 2298

我知道如何使用 for 循环来完成此操作,但它需要无穷无尽的时间。 我很乐意提出任何建议。
(通过这个例子,您可能会理解为什么知道何时做出预测很重要——我现在不会知道这一点。我正在考虑添加一个新行,其中包含在每个数据帧中做出预测的日期)

到目前为止访问过的主题包括:
convert a row of a data frame to a simple vector in R
How to get the name of a data.frame within a list?(或多或少解决了名称问题)
如您所见,没有线程特别有用。

根据要求,一个可重现的小例子:

dateList <- as.Date(seq(0,100,5),origin="2010-01-01")
forecasts <- seq(2000,3000,50)
df1 <- data.frame(dateList,forecasts)
df2 <- data.frame(dateList-50,forecasts)
l <- list(df1,df2)

我们有从 2010-01-01 开始的日期,以 5 天为步长。例如,我想知道两个数据帧中 2010-01-01 的预测值。
第一个数据框如下所示:

   dateList forecasts
1 2010-01-01      2000
2 2010-01-06      2050
3 2010-01-11      2100

而第二个看起来像这样:

10    2009-12-27      2450
11    2010-01-01      2500
12    2010-01-06      2550

我希望找出 2010-01-01 的预测值。
所以,例如:
功能(2010-01-01):
2000 2500

等不及你的例子了,所以我做了一个小例子。让我知道这是否符合您所追求的总体方向。

xy <- list(df1 = data.frame(dates = as.Date(c("2016-01-01", "2016-01-02", "2016-01-03")), value = runif(3)),
           df2 = data.frame(dates = as.Date(c("2016-01-01", "2016-01-02", "2016-01-03")), value = runif(3)),
           df3 = data.frame(dates = as.Date(c("2016-01-01", "2016-01-02", "2016-01-03")), value = runif(3))
           )

getValueOnDate <- function(x, list.all) {
  lapply(list.all, FUN = function(m) m[m$dates %in% x, ])
}

out <- getValueOnDate(as.Date("2016-01-02"), list.all = xy)

do.call("rbind", out)

         dates     value
df1 2016-01-02 0.7665590
df2 2016-01-02 0.9907976
df3 2016-01-02 0.4909025

您显然可以将函数修改为 return 仅值。

如果您的列表名为 ls 且所有 data.frame 中的日期列为 date,您也可以使用以下方法:

my.ls <- lapply(ls, subset, date == "2010/05/02")
df <- do.call("rbind", my.ls)