aL3*_*3xa 4 r aggregate-functions plyr reshape
我通常使用reshape包来聚合一些数据(呃),通常是plyr因为它的超级功能each.最近,我收到了一个建议,转而reshape2试用,现在我似乎each再也不能使用魔法了.
> m <- melt(mtcars, id.vars = c("am", "vs"), measure.vars = "hp")
> cast(m, am + vs ~ variable, each(min, max, mean, sd))
am vs hp_min hp_max hp_mean hp_sd
1 0 0 150 245 194.16667 33.35984
2 0 1 62 123 102.14286 20.93186
3 1 0 91 335 180.83333 98.81582
4 1 1 52 113 80.57143 24.14441
Run Code Online (Sandbox Code Playgroud)
require(plyr)
> m <- melt(mtcars, id.vars = c("am", "vs"), measure.vars = "hp")
> dcast(m, am + vs ~ variable, each(min, max, mean, sd))
Error in structure(ordered, dim = ns) :
dims [product 4] do not match the length of object [16]
In addition: Warning messages:
1: In fs[[i]](x, ...) : no non-missing arguments to min; returning Inf
2: In fs[[i]](x, ...) : no non-missing arguments to max; returning -Inf
Run Code Online (Sandbox Code Playgroud)
我没有心情去梳理它,因为我之前的代码就像一个魅力reshape,但我真的很想知道:
each使用dcast?reshape2?已reshape弃用?你的第一个问题的答案似乎是否定的.引用自?reshape2:::dcast:
如果您提供的变量组合不能唯一标识原始数据集中的一行,则需要提供聚合函数fun.aggregate.此函数应采用数字向量并返回单个摘要统计信息.
看看Hadley的reshape2的github页面表明他知道这个功能被删除了,但似乎认为在plyr中做得更好,大概是这样的:
ddply(m,.(am,vs),summarise,min = min(value),
max = max(value),
mean = mean(value),
sd = sd(value))
Run Code Online (Sandbox Code Playgroud)
或者如果你真的想继续使用each:
ddply(m,.(am,vs),function(x){each(min,max,mean,sd)(x$value)})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1739 次 |
| 最近记录: |