如何从plyr的产出范围而非长期进行总结

如何从plyr的产出范围而非长期进行总结,r,each,plyr,R,Each,Plyr,我喜欢plyr将数据帧分割成多个数据集,然后对每个数据集执行相同操作的能力。最好的部分是它将结果显示为一个整洁、紧凑、标记良好的表格。我喜欢使用each()将一系列计算放到一行中。但是,我不明白为什么在ddply参数中使用summary函数会破坏输出,并使其变得冗长和未标记。看看这里,看看我的意思。你能告诉我我做错了什么吗?我更喜欢使用摘要 让我们首先建立一个示例数据框。假设一项研究有60名参与者。其中20人很有趣,20人很聪明,20人很好。然后每个受试者都得到一个分数 type<-rep

我喜欢plyr将数据帧分割成多个数据集,然后对每个数据集执行相同操作的能力。最好的部分是它将结果显示为一个整洁、紧凑、标记良好的表格。我喜欢使用each()将一系列计算放到一行中。但是,我不明白为什么在ddply参数中使用summary函数会破坏输出,并使其变得冗长和未标记。看看这里,看看我的意思。你能告诉我我做错了什么吗?我更喜欢使用摘要

让我们首先建立一个示例数据框。假设一项研究有60名参与者。其中20人很有趣,20人很聪明,20人很好。然后每个受试者都得到一个分数

type<-rep(c("funny","clever", "nice"),20)
score<-rnorm(60)+10
data<-data.frame(type,score)
上面这行应该给出一个很好的表(3行-每种类型1行,4列数据)。遗憾的是,它给出了一个完整的长表,其中只有一列数字,没有一列被标记

ddply(data,.(type), function(jjkk) each(mean,median,min,max)(jjkk$score))

上面这行给了我想要的。你能解释一下我对ddply语法不理解的地方吗。

详细说明函数,如:

ddply(data,"type", summarise, mean=mean(score),median=median(score),max=max(score),min=min(score))
以所需的格式生成输出


我认为您的问题在于
each()
返回一个向量,而
summary()
并没有按照您希望的方式进行处理。

嗯。。。我太累了,想不起一行代码,但是
重塑
就可以了:

library(reshape)
library(plyr)
mdtf <- melt(data)
cast(mdtf, type ~ ., each(min, max, mean, median))
    type      min      max      mean   median
1 clever 7.808648 12.08930 10.125563 10.27269
2  funny 8.302777 12.04066  9.941331 10.07333
3   nice 8.442508 11.80132 10.085667 10.07261
库(重塑)
图书馆(plyr)
mdtf
library(reshape)
library(plyr)
mdtf <- melt(data)
cast(mdtf, type ~ ., each(min, max, mean, median))
    type      min      max      mean   median
1 clever 7.808648 12.08930 10.125563 10.27269
2  funny 8.302777 12.04066  9.941331 10.07333
3   nice 8.442508 11.80132 10.085667 10.07261