2

我需要一些建议来更好地设计我的问题的解决方案。

我从参数研究结果(时间序列数据)的许多 Csv 文件开始。我想分析一些参数对变量的影响。这个想法是从参数研究的每个 id 的结果表中提取一些变量,并为每个变量创建一个 data.frame,以便轻松地进行一些绘图和一些分析。

问题是一些参数改变了参数研究的时间步长,所以有一些csv要长得多。例如,一个变量是温度。是否可以保持时间步长的差异并评估变化一个参数的 Delta T?Plyr 能做到吗?或者我必须重新采样我的部分结果以使这个评估丢失部分信息?我现在做到了这一点:

head(data, 5)

                  names           Date.Time Tout.dry.bulb RHout TsupIn  TsupOut  QconvIn[Wm2]
1 G_0-T_0-W_0-P1_0-P2_0 2005-01-01 00:03:00             0    50     23 15.84257 -1.090683e-14
2 G_0-T_0-W_0-P1_0-P2_0 2005-01-01 00:06:00             0    50     23 16.66988  0.000000e+00
3 G_0-T_0-W_0-P1_0-P2_0 2005-01-01 00:09:00             0    50     23 13.83446  1.090683e-14
4 G_0-T_0-W_0-P1_0-P2_0 2005-01-01 00:12:00             0    50     23 14.34774  2.181366e-14
5 G_0-T_0-W_0-P1_0-P2_0 2005-01-01 00:15:00             0    50     23 12.59164  2.181366e-14
  QconvOut[Wm2] Hvout[Wm2K]  Qradout[Wm2] MeanRadTin MeanAirTin MeanOperTin
1        0.0000       17.76 -5.428583e-08         23         23          23
2     -281.3640       17.76 -1.151613e-07         23         23          23
3     -296.0570       17.76 -1.018871e-07         23         23          23
4     -245.7001       17.76 -1.027338e-07         23         23          23
5     -254.8158       17.76 -9.458750e-08         23         23          23


> str(data)
'data.frame':  1858080 obs. of  13 variables:
$ names        : Factor w/ 35 levels "G_0-T_0-W_0-P1_0-P2_0",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Date.Time    : POSIXct, format: "2005-01-01 00:03:00" "2005-01-01 00:06:00" "2005-01-01 00:09:00" ...
$ Tout.dry.bulb: num  0 0 0 0 0 0 0 0 0 0 ...
$ RHout        : num  50 50 50 50 50 50 50 50 50 50 ...
$ TsupIn       : num  23 23 23 23 23 23 23 23 23 23 ...
$ TsupOut      : num  15.8 16.7 13.8 14.3 12.6 ...
$ QconvIn[Wm2] : num  -1.09e-14 0.00 1.09e-14 2.18e-14 2.18e-14 ...
$ QconvOut[Wm2]: num  0 -281 -296 -246 -255 ...
$ Hvout[Wm2K]  : num  17.8 17.8 17.8 17.8 17.8 ...
$ Qradout[Wm2] : num  -5.43e-08 -1.15e-07 -1.02e-07 -1.03e-07 -9.46e-08 ...
$ MeanRadTin   : num  23 23 23 23 23 23 23 23 23 23 ...
$ MeanAirTin   : num  23 23 23 23 23 23 23 23 23 23 ...
$ MeanOperTin  : num  23 23 23 23 23 23 23 23 23 23 ...

names(DF)
[1] "G_0-T_0-W_0-P1_0-P2_0" "G_0-T_0-W_0-P1_0-P2_1" "G_0-T_0-W_0-P1_0-P2_2"
[4] "G_0-T_0-W_0-P1_0-P2_3" "G_0-T_0-W_0-P1_0-P2_4" "G_0-T_0-W_0-P1_0-P2_5"
[7] "G_0-T_0-W_0-P1_0-P2_6" "G_0-T_0-W_0-P1_1-P2_0" "G_0-T_0-W_0-P1_1-P2_1"
[10] "G_0-T_0-W_0-P1_1-P2_2" "G_0-T_0-W_0-P1_1-P2_3" "G_0-T_0-W_0-P1_1-P2_4"
[13] "G_0-T_0-W_0-P1_1-P2_5" "G_0-T_0-W_0-P1_1-P2_6" "G_0-T_0-W_0-P1_2-P2_0"
[16] "G_0-T_0-W_0-P1_2-P2_1" "G_0-T_0-W_0-P1_2-P2_2" "G_0-T_0-W_0-P1_2-P2_3"
[19] "G_0-T_0-W_0-P1_2-P2_4" "G_0-T_0-W_0-P1_2-P2_5" "G_0-T_0-W_0-P1_2-P2_6"
[22] "G_0-T_0-W_0-P1_3-P2_0" "G_0-T_0-W_0-P1_3-P2_1" "G_0-T_0-W_0-P1_3-P2_2"
[25] "G_0-T_0-W_0-P1_3-P2_3" "G_0-T_0-W_0-P1_3-P2_4" "G_0-T_0-W_0-P1_3-P2_5"
[28] "G_0-T_0-W_0-P1_3-P2_6" "G_0-T_0-W_0-P1_4-P2_0" "G_0-T_0-W_0-P1_4-P2_1"
[31] "G_0-T_0-W_0-P1_4-P2_2" "G_0-T_0-W_0-P1_4-P2_3" "G_0-T_0-W_0-P1_4-P2_4"
[34] "G_0-T_0-W_0-P1_4-P2_5" "G_0-T_0-W_0-P1_4-P2_6"

从 P1_4-P2_0 到 P1_4-P2_6 的长度是 37920 的 113760 obstand,因为时间步长从 3 分钟变为 1 分钟。

我想为每个变量分离数据库,其中我有 date.time 和列中每个名称的变量值。我该怎么做?

感谢您的任何建议

4

1 回答 1

0

我强烈建议使用适合处理时间序列的数据结构。在这种情况下,zoo 包会很好地工作。将每个 CSV 文件加载到 zoo 对象中,使用 Date.Time 列定义数据的索引(时间戳)。例如,您可以使用 zoo() 函数来创建这些对象。

然后使用zoo的合并功能来合并对象。它将找到具有相同时间戳的观察并将它们放入一行。使用merge可以指定all=TRUE得到所有时间戳的并集;或者您可以指定 all=FALSE 来获取时间戳的交集。对于联合 (all=TRUE),缺失的观察结果将为 NA。

read.zoo 函数可能很难用于读取数据。我建议将您对 read.zoo 的调用替换为以下内容:

table <- read.csv(filepath, header=TRUE, stringsAsFactors=FALSE)
dateStrings <- paste("2005/", table$Date.Time, sep="")
dates <- as.POSIXct(dateStrings)
dat <- zoo(table[,-1], dates)

(我假设 Date.Time 是文件中的第一列。这就是我写 table[,-1] 的原因。)

于 2012-10-11T23:19:05.013 回答