【问题标题】:R time series data manipulation with different data length_extract variable具有不同数据长度_提取变量的 R 时间序列数据操作
【发布时间】:2012-10-10 15:06:13
【问题描述】:

我需要一些建议以更好地解决我的问题。

我从参数研究结果(时间序列数据)的许多 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 和列中每个名称的变量值。 我该怎么做?

感谢您的建议

【问题讨论】:

    标签: r csv plyr


    【解决方案1】:

    我强烈建议使用适合处理时间序列的数据结构。在这种情况下,zoo package 可以正常工作。将每个 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] 的原因。)

    【讨论】:

    • 我发布了我的代码。您对解决我的问题有什么建议吗?谢谢
    • 见我编辑的答案,上面,建议如何使用 read.csv 函数。
    • 我有一个问题:警告消息:在 zoo(table[, -1], dates) 中:如果 'order.by' 中的索引条目是,“zoo”对象的某些方法不起作用不是唯一的
    • 我发现一个错误。当我粘贴(“2005/”,table$Date.Time,sep="")时,我在“/”之后获得了一个空格。所以我插入其他行来删除它。 dateStrings
    • 我尝试了所有不同的格式,但我意识到没有一个能很好地工作,但现在我明白问题可能是另一个问题。在我的数据中,第一天重复 20 次以达到稳定状态。动物园可能不了解那个系列。你在想什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    相关资源
    最近更新 更多