展平/非规范化R聚合函数的结果

Vin*_*tto 5 aggregate r plyr reshape

我是R的新手,我正在尝试使用aggregate数据框,每个主题和我的数据集中的每个指标执行一些时间序列整形.这很好用,但我发现结果不是一种非常容易使用的格式.我希望能够将结果转换回与原始数据帧相同的格式.

以虹膜数据集为例:

# Split into two data frames, one for metrics, the other for grouping
iris_species = subset(iris, select=Species)
iris_metrics = subset(iris, select=-Species)
# Compute diff for each metric with respect to its species
iris_diff = aggregate(iris_metrics, iris_species, diff)
Run Code Online (Sandbox Code Playgroud)

我只是diff用来说明我有一个塑造时间序列的函数,所以我得到一个可能不同长度的时间序列作为结果,绝对不是一个单一的聚合值(例如平均值).

我想转换结果,这似乎是一个矩阵,它具有列表值单元格到原始的"平面"数据帧.

我主要是好奇如何从结果管理这个aggregate,但我很确定用在千方百计解决方案plyrreshape.

Mat*_*erg 2

您可能知道,aggregate一次只处理一列。预期值为单个值,如果返回长度不同于 1 的向量,就会发生奇怪的情况。

您可以将其拆分以by获取数据(行数少于iris)并将其重新组合在一起:

b <- by(iris_metrics, iris_species, FUN=function(x) diff(as.matrix(x)))
do.call(rbind, lapply(names(b), function(x) data.frame(Species=x, b[[x]])))
Run Code Online (Sandbox Code Playgroud)

diff(as.matrix)使用它是因为这可以满足您对矩阵的需求(但不适用于数据框)。关键点是该函数返回的行数与每个Speciesin中的行数不同iris