动物园对象聚合

Joh*_*ohn 6 r dataframe zoo

亲爱的社区,

我收到的数据将在数据框中:

Var_1      Var_2         Date        VaR_3  VaR_4   VaR_5   Var_6
1           4       2010-01-18         7    apple    10    sweet
2           5       2010-07-19         8    orange   11    sour
3           6       2010-01-18         9    kiwi     12    juicy
...        ...      ...               ...   ...     ...    ... 
Run Code Online (Sandbox Code Playgroud)

我想使用zoo,因为它似乎是一个灵活的对象类.我只是从R开始,我试图阅读包的描述(小插曲).

问题:

  1. 鉴于以上数据为数据框,建议将完整的df转换为动物园对象,告诉动物园它应该使用第三列作为日期列(日期可以在数据中多次出现)?
  2. 如何使用动物园内置函数每月汇总所有其他列,第4列和第6列除外?动物园是否能够自动丢弃分类变量并只使用那些适合聚合的列?
  3. 对于第4列中的每个类别,如何按月汇总所有数字列(第6列不应包括在内,因为它不是数字的).

感谢您的支持.

G. *_*eck 4

Zoo 对象是时间序列,通常是数值向量或矩阵。看起来你真正拥有的是一堆不同的时间序列,其中第 5 列标识了它是哪个序列。即有苹果系列、橙子系列、猕猴桃系列等,每一个系列都有几列。

删除最后一列,因为它不是数字,使用第三列作为索引并在第 5 列上拆分,我们有:

# create test data
Lines <- "Var_1      Var_2         Date        VaR_3  VaR_4   VaR_5   Var_6
1           4       2010-01-18         7    apple    10    sweet
2           5       2010-07-19         8    orange   11    sour
3           6       2010-01-18         9    kiwi     12    juicy"
cat(Lines, "\n", file = "data.txt")

library(zoo)
z <- read.zoo("data.txt", header = TRUE, index = 3, split = "VaR_5",
  colClasses = c(Var_6 = "NULL"))
Run Code Online (Sandbox Code Playgroud)

结果是:

> z
           Var_1.apple Var_2.apple VaR_3.apple VaR_5.apple Var_1.kiwi
2010-01-18           1           4           7          10          3
2010-07-19          NA          NA          NA          NA         NA
           Var_2.kiwi VaR_3.kiwi VaR_5.kiwi Var_1.orange Var_2.orange
2010-01-18          6          9         12           NA           NA
2010-07-19         NA         NA         NA            2            5
           VaR_3.orange VaR_5.orange
2010-01-18           NA           NA
2010-07-19            8           11
Run Code Online (Sandbox Code Playgroud)

上面假设对于第 5 列的给定值,日期是唯一的。如果情况并非如此,则包含 的aggregate = mean参数或其他一些值aggregate

现在,我们将其汇总为每月动物园系列:

aggregate(z, as.yearmon, mean)
Run Code Online (Sandbox Code Playgroud)

也可以使用以下FUN = as.yearmon参数将其直接转换为每月:

zm <- read.zoo("data.txt", header = TRUE, index = "Date", split = "VaR_4", 
  FUN = as.yearmon, colClasses = c(Var_6 = "NULL"), aggregate = mean)
Run Code Online (Sandbox Code Playgroud)

另请参阅?read.zoovignette("zoo-read")、以及其他小插图和帮助文件。?aggregate.zoo