我有一个数据框列表,每个数据框对应一个日期,每个数据框的行对应一天中的每小时。我需要在每天的等效时间戳上应用滚动功能。
例如,对于滚动的5期间窗口,我想要在每个01:00:00,02:00:00等处应用一个函数,在前5天的时间戳中滚动直到 end = length(list)-5 ,每个函数应用程序产生一个值。结果将是长度为 end 的每个时间戳的值向量。
我正在考虑创建一个新的数据框列表,其中每个数据框对应一个时间戳,行对应天数,在这种情况下,我想知道将当前数据帧列表转换为此的最佳方法新格式。但是,如果还有其他更有效的方法,我可以接受其他建议。
修改 我试图在下面包含一个示例数据集和结果,但我不知道如何正确格式化数据
例如,如果列表包含4个具有以下格式的数据帧。 Col1是一个变量,Col2是另一个变量
Date Time Col1 Col2
1 2014-08-12 09:00:00 -0.0001079389 0.0002159128
2 2014-08-12 09:30:00 -0.0002158895 0.0002159361
3 2014-08-12 10:00:00 -0.0001079739 0.0008642109
4 2014-08-12 10:30:00 -0.0003241666 0.0003242717
5 2014-08-12 11:00:00 -0.0006482282 0.0005405113
6 2014-08-12 11:30:00 -0.0010794474 0.0002160294
7 2014-08-12 12:00:00 -0.0002157963 0.0002158429
8 2014-08-12 12:30:00 -0.0001079040 0.0009716600
9 2014-08-12 13:00:00 -0.0005397528 0.0002159827
10 2014-08-12 13:30:00 0.0000000000 0.0005398111
11 2014-08-12 14:00:00 0.0000000000 0.0003238517
12 2014-08-12 14:30:00 -0.0002158895 0.0003239216
13 2014-08-12 15:00:00 -0.0002159128 0.0001079739
14 2014-08-12 15:30:00 0.0000000000 0.0008642109
15 2014-08-12 16:00:00 -0.0003240966 0.0004322922
16 2014-08-12 16:30:00 -0.0003241666 0.0003242717
17 2014-08-12 17:00:00 -0.0008642109 0.0001080789
18 2014-08-12 17:30:00 -0.0001079739 0.0004320121
19 2014-08-12 18:00:00 -0.0005396945 0.0001079739
如果函数的滚动窗口是2,使用诸如乘法之类的简单函数,前两个数据帧中的等效行将相乘,向前滚动直到第3和第4个数据帧中的等效行相乘。
Res1 = data.frame(matrix(NA,ncol=3,nrow=19))
rownames(Res1) = Example[[1]][,2]
colnames(Res1) = c("2014-08-13","2014-08-14","2014-08-15")
Res1[,1]= Example[[1]][,3]*Example[[2]][,3]
Res1[,2]= Example[[2]][,3]*Example[[3]][,3]
Res1[,3]= Example[[3]][,3]*Example[[4]][,3]
这是一个简单的例子,因为我想要应用的函数会一次滚动5个数据帧中的等效行。下面,该函数仅应用于Col1变量以简化,但我会分别对所有变量执行此操作。
结果应如下所示,其中第一列名称是每个滚动窗口的结尾,因此4个数据帧,相当于4个日期变为3列
row.names 2014-08-13 2014-08-14 2014-08-15
1 09:00:00 0.000000e+00 0.000000e+00 4.612407e-08
2 09:30:00 6.987091e-08 0.000000e+00 0.000000e+00
3 10:00:00 6.987846e-08 6.954805e-08 4.614140e-08
4 10:30:00 4.889919e-07 1.621737e-07 2.307567e-08
5 11:00:00 0.000000e+00 0.000000e+00 0.000000e+00
6 11:30:00 6.977682e-07 4.869397e-07 8.083873e-08
7 12:00:00 2.325015e-08 5.794719e-08 1.154280e-07
8 12:30:00 0.000000e+00 0.000000e+00 0.000000e+00
9 13:00:00 5.816615e-08 0.000000e+00 0.000000e+00
10 13:30:00 0.000000e+00 9.270554e-08 6.921964e-08
11 14:00:00 0.000000e+00 0.000000e+00 0.000000e+00
12 14:30:00 0.000000e+00 0.000000e+00 9.224832e-08
13 15:00:00 1.627863e-07 1.621387e-07 2.305836e-08
14 15:30:00 0.000000e+00 0.000000e+00 0.000000e+00
15 16:00:00 6.972068e-08 0.000000e+00 0.000000e+00
16 16:30:00 1.045980e-07 3.122420e-07 4.148280e-07
17 17:00:00 0.000000e+00 0.000000e+00 2.419698e-07
18 17:30:00 0.000000e+00 0.000000e+00 2.303854e-07
19 18:00:00 5.810978e-08 1.040920e-07 6.218404e-07
答案 0 :(得分:0)
对于发现自己处于此链接的其他人,我在this link
找到了答案确切地说,我做了以下操作,之后您可以将滚动功能应用于新形成的数据
DataSample = lapply(DataList, function(x) with(x,x[x$Col==Idx,,drop=FALSE]))
DataSample = data.frame(matrix(unlist(DataSample),nrow=noDays,byrow=T),stringsAsFactors=FALSE)