我对 R 还很陌生,我正在尝试使用 aggregate
对数据帧、每个主题和数据集中的每个指标执行一些时间序列整形。这很好用,但我发现结果不是很容易使用的格式。我希望能够将结果转换回与原始数据帧相同的格式。
以 iris 数据集为例:
# 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)
我只是在用
diff
为了说明我有一个塑造时间序列的函数,所以我得到了一个可能不同长度的时间序列,绝对不是一个单一的聚合值(例如平均值)。我想转换结果,这似乎是一个矩阵,其中列出了原始“平面”数据框的值单元格。
我很好奇如何使用来自
aggregate
的结果来管理这个问题。 ,但我可以接受在 plyr
中执行所有操作的解决方案或 reshape
.
最佳答案
在这种情况下,我能想到的最佳解决方案是 data.table
:
require(data.table)
dt <- data.table(iris, key="Species")
dt.out <- dt[, lapply(.SD, diff), by=Species]
如果你想要一个
plyr
解决方案,那么思路基本一致。按 Species
拆分并申请 diff
到每一列。require(plyr)
ddply(iris, .(Species), function(x) do.call(cbind, lapply(x[,1:4], diff)))
关于r - 扁平化/非规范化 R 聚合函数的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15168090/