我想找到一种处理一组时间序列数据的最佳方法。在我的数据集中有几个对象(数千个,一个连续),每个对象具有一组属性(具有中值和方差),用于几个不规则间隔的日期(十进制)。表格的第一行如下所示:
"2012-08-14_ari-1_median" "2012-08-14_ari-1_variance" "2012-08-14_bai_median" "2012-08-14_bai_variance" "2012-08-14_blue_median" "2012-08-14_blue_variance" ...
"1" 20.388762 3.1271796 0.2533784 0.0374 0.89685684 0.054375805 ...
"2" 25.483303 5.3743725 0.37641725 0.0323 0.89529204 0.05524634 ...
"3" 10.6717825 5.784709 0.52881724 0.0724 0.5804015 0.3661
...
我的目标是对数据属性进行时间分析。因此,我想创建最有效的方法来存储数据。使用所有数据创建数据框很容易。我的问题是如何包括时间。目前的想法是创造这样的东西:
ari-1 bai
2012-08-14 2012-08-21 2012-09-01 ... 2012-08-14 2012-08-21 2012-09-01 ...
"1"
"2"
"3"
...
另一种选择是:
2012-08-14 2012-08-21 2012-09-01
ari-1 bai blue ... ari-1 bai blue ... ari-1 bai blue ...
"1"
"2"
"3"
...
这有可能实现吗?这甚至是一个好方法吗?还有哪些更好的选择?
我尝试使用xts并从数据框的一部分创建了一个对象(首先转发df):
"1" "2" "3" ...
2012-08-14 0.9804026 0.8968568 0.8952920 0.5804015 0.3915596
2012-08-21 0.8128355 0.8878272 0.8045192 0.8428068 0.8696688
2012-09-01 0.6153219 0.4710921 0.4936159 0.5018827 0.7701396
这意味着我的xts只有几行(几十个日期),但很多(数千)列。这仅适用于一个属性。
非常感谢R新手的任何帮助。
答案 0 :(得分:1)
正如您可能怀疑的那样,有很多方法可以做到这一点,并且都有好处和缺点。
创建数据对象时最简单的方法可能是保持数据框的结构不变,并通过制作数据框列表来添加时间组件,列表中的每个项目都是及时的快照。
frame_time <- function(t) {
a = rnorm(5, t, 1)
b = rnorm(5, t, 2)
c = rnorm(5, t, 3)
data.frame(a, b, c)
}
d <- lapply(1:10, frame_time)
如果您是R的新手,从这个对象中提取时间序列数据可能会很麻烦。但您可以使用以下事实:使用[
建立索引实际上是一个函数(运行`[`(x, y, z)
与x[y,z]
相同),并将其传递给apply
函数之一,像这样:
sapply(d, "[", 1, 1)
(其中"["
是因为sapply
可以通过名称查找函数以及传递实际函数 - 在这种情况下很有用。)这会使元素处于1,1位置存储在数据框列表中的每个项目。
还有其他几种方法可以做同样的事情,即将数据置于三维结构中。在创建数据集的便利性与以后访问数据集的便利性之间进行权衡时,您选择了哪些边距,因此您应该选择最适合您的边距。
完全不同的方法是使用长格式数据集。这种类型的数据结构依赖于每个数据点的ID变量;在您的情况下,这些可能是时间,对象编号和度量(例如ari-1_median
)。数据集的简化版本可能如下所示:
time variable object value
1 1 a 1 0.0003081319
2 2 a 1 -1.3294403879
3 1 b 1 -0.1419320288
4 2 b 1 -0.9520839796
5 1 a 2 -0.8922036126
6 2 a 2 -1.8102263590
7 1 b 2 -1.1126900256
8 2 b 2 -0.2621680731
获取长格式数据的时间序列是使用ID变量的简单问题(这里我将上面的长格式数据放入数据框e
):
e$value[e$variable == "a" & e$object == 1]
reshape2
软件包提供了许多工具,用于处理长格式数据以及在长格式和宽格式之间转换,这种格式更具人性化。
答案 1 :(得分:0)
如果您尝试对数据进行分析,则应尝试遵循重塑库中最佳描述的数据格式标准。基本上,尝试使用Oracle或任何其他SQL表提供的相同样式。
在您的情况下,我相信数据框架看起来像这样:
variable measurment measurment_number date value
ari median 1 2012-08-14 20.388762
ari variance 1 ... ....
ari median 2 2012-08-14 20.111
等。 这样,您就可以轻松使用dplyr等库来汇总和分析数据。 要以这种方式整理您的数据,我强烈建议您查看reshape library,特别是功能融化。
答案 2 :(得分:0)
@ user164385和@Zakkery都建议使用长格式数据集。在对主数据框进行子设置后,$.post(url, { 'data' : 'qdewde' }, function(data) {
var vd = $('<div>', {html:data});
alert(vd.find('.entry').length);
}, 'html');
中的一个简单melt
和一些列重新格式化以适合分析的形式提供了数据集。
reshape2