R 中的时间序列数据

Time Series Data in R

我对 R 有基本的了解,主要是 运行 回归和汇总统计的能力,所以如果我的知识出现任何差距,我会很感激被指出正确的方向。

我有 CSV 格式的时间序列数据,格式如下:

Facility ID, Utility Type, Account No, Unit Name, Date 1, Date 2, Date 3, Date 4

引用唯一公用事业类型和设施的特定帐号将有多行(即,单位名称 = L 的一行条目,单位名称 = USD 的一行条目)。在每个 "date" 列中输入每个日期特定单位的帐号值。我希望能够编写一个脚本,使我能够重新导出每个日期列不包含多个单元条目的数据。然后我还想向 R 指定 Date 列代表每月时间序列数据点,并从那里进行各种时间序列分析。

非常感谢你帮助我告诉我如何清理这些数据。

根据要求,示例数据:

Facility ID, Facility Name, State, Utility Type, Supplier, Account No., Unit Name, 7/1/14, 8/1/14
4015, Palm Court Apts, CA, Chilled Water, PG&E, 87993, USD, 42333, 41775
4015, Palm Court Apts, CA, Chilled Water, PG&E, 87993, ton-hr, 244278, 238035
4044, 18 Sawtelle, CA, Natural Gas, Chevron, 17965, USD, 4860, 5890
4044, 18 Sawtelle, CA, Natural Gas, Chevron, 17965, M^3, 7639, 8895

示例输出:

Facility ID, Facility Name, State, Utility Type, Supplier, Account No., Quantity Consumed, Unit of Measure, Utility Bill, Currency, Date
4015, Palm Court Apts, CA, Chilled Water, PG&E, 87993, 244278, ton-hr, 42333, USD, 7/1/14
4015, Palm Court Apts, CA, Chilled Water, PG&E, 87993, 238035, ton-hr, 41775, USD, 8/1/14
4044, 18 Sawtelle, CA, Natural Gas, Chevron, 17965, 7639, M^3, 4860, USD, 7/1/14
4044, 18 Sawtelle, CA, Natural Gas, Chevron, 17965, 8895, M^3, 5890, USD, 8/1/14
library(reshape2)
d = read.csv("data.csv")
d.molten = melt(d, 
  id.vars=c("Facility.ID", "Facility.Name", "State", "Utility.Type", "Supplier", "Account.No.", "Unit.Name"), 
  variable.name = "Date"
)

melt 函数将 "wide" 格式(列数未定义)分解为 "long" 格式,其中每一行都是一个观察值。这实际上是你在 R 中做的大多数事情的首选格式,至少在使用 packages from the "Hadleyverse" 时是这样。特别是对于时间序列。

但我们还没有完成。现在你有以下结构:

Facility.ID    Facility.Name …  Date  value
       4015  Palm Court Apts X7.1.14  42333

我们必须修正目前 "strings" 的日期。他们有一个 "X" 前缀,因为列名不能以数字开头,也不能包含空格。

d.molten$Date=as.Date(d.molten$Date, "X%m.%d.%y")

现在您的日期看起来是正确的,并且每个观测值都有一行:

Facility.ID    Facility.Name …     Date  value
       4015  Palm Court Apts 2014-07-01  42333

现在我们可以轻松绘制时间序列了:

library(ggplot2)
ggplot(d.molten, 
  aes(x = Date, y = value, color = Facility.Name)) + 
  geom_point()