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