Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 基于日期的数据帧筛选器行列表_R_List_Filter_Dataframe_Row - Fatal编程技术网

R 基于日期的数据帧筛选器行列表

R 基于日期的数据帧筛选器行列表,r,list,filter,dataframe,row,R,List,Filter,Dataframe,Row,我目前正在处理数据帧列表。 事实上,我有大约一百个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 #anoth

我目前正在处理数据帧列表。
事实上,我有大约一百个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数据作为数据帧读入,并将生成的每个数据帧保存在列表中。
(遗憾的是,做出预测的日期丢失了——我希望能够用相应的日期命名列表元素,但还没有弄清楚如何做到这一点,我很确定我会在某个地方找到一些东西,而不是这里的主要问题)

这就是问题的标题:我想知道如何按行值筛选数据帧列表。
因此,我希望能够使用function:function(2010/05/02)并获得列表中每个元素(列表中的每个数据帧)的行,其中日期为2010/05/02

在这种情况下,我希望得到:

2010/05/02 2372
2010/05/02 2298
我知道如何使用for循环来实现这一点,但它需要无限长的时间。 我很乐意接受任何建议。
(通过这个例子,您可能理解了为什么知道何时做出预测很重要——我现在不知道。我正在考虑在每个数据帧中添加一行,其中包含做出预测的日期)

到目前为止访问的线程包括:

(这或多或少地解决了名称问题)
正如您所看到的,没有任何线程特别有用

根据要求,一个小的可复制示例:

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)
第二个看起来像这样:

   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

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

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

xy您也可以使用以下方法,因为您的列表称为
ls
,并且在所有
数据框中的日期列
date

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

my.ls您也可以使用以下方法,因为您的列表名为
ls
,并且在所有
data.frame
中都有日期列
date

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

my.ls你能提供一个可复制的示例(一个小的data.frames列表)吗?你能提供一个可复制的示例(一个小的data.frames列表)吗?实际上,这正是我想要做的。经过一些小的修改后,效果非常好!非常感谢。你有什么建议让我更好地进入R吗?除了尝试失败,还有什么别的办法?如果你知道基本Java,有什么好书吗?@user18093 Practice@user18093可能会让你走上正确的道路。事实上,这正是我想要做的。经过一些小的修改后,效果非常好!非常感谢。你有什么建议让我更好地进入R吗?除了尝试失败,还有什么别的办法?如果你知道基本Java,有什么好书吗?@user18093 Practice@user18093也许会让你走上正确的道路