【发布时间】:2016-02-14 16:18:20
【问题描述】:
我目前正在处理数据框列表。
实际上,我有大约一百个代表某种预测的 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 年 5 月 2 日)的预测值随时间的变化情况。
现在,我将所有 .csv 数据作为数据框读取,并将每个生成的数据框保存在一个列表中。
(可悲的是,做出预测的日期丢失了——我希望能够用相应的日期命名列表元素,但还没有弄清楚如何做到这一点——不过,我很确定我会找到一些东西某处,不是这里的主要问题)
这就是问题标题的来源:我想知道如何按行值过滤数据框列表。
所以,我希望能够使用一个函数:function(2010/05/02) 并得到列表中每个元素的行(列表中的每个数据框),其中日期为 2010/05/02 .
在这种情况下,我想得到:
2010/05/02 2372
2010/05/02 2298
我知道如何使用 for 循环来做到这一点,但它需要无穷无尽的时间。
我很高兴有任何建议。
(通过这个例子,你可能会理解为什么知道预测是什么时候做出的很重要——我现在不知道。我正在考虑在每个数据帧中添加一个包含预测日期的新行)
到目前为止访问的主题包括:
get column from list of dataframes R
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 年 1 月 1 日开始计算为 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
【问题讨论】:
-
您能否提供一个可重现的示例(一小部分 data.frames)?
标签: r list filter dataframe row