3

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

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

type<-rep(c("funny","clever", "nice"),20)
score<-rnorm(60)+10
data<-data.frame(type,score)

现在我想要一个表格,显示 3 种类型的人的平均分数、中位数分数、最低分数和最高分数

ddply(data,.(type), summarise, each(mean,median,min,max)(score))

上面的行应该给出了一个漂亮的表格(3 行 - 每种类型 1 行,4 列数据)。唉,它给出了一个只有一列数字的长表,没有一个数字被标记。

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

上面的行给了我想要的东西。你能解释一下我对 ddply 语法的不理解吗?

4

2 回答 2

5

拼写出功能,如:

ddply(data,"type", summarise, mean=mean(score),median=median(score),max=max(score),min=min(score))

以您想要的格式生成输出。

我认为你的问题是each()返回一个向量,它summarize()并没有真正按照你想要的方式处理。

于 2011-03-10T01:35:14.693 回答
4

嗯......我太累了,无法考虑单线,但reshape会成功:

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
于 2011-03-10T01:35:35.100 回答