gpt4 book ai didi

r - 构建均值/方差汇总表的快速/优雅方法

转载 作者:行者123 更新时间:2023-12-03 11:44:47 24 4
gpt4 key购买 nike

我可以完成这项任务,但我觉得必须有一种“最佳”(最巧妙、最紧凑、最清晰的代码、最快?)

对于一组指定的分类因子,我想按组构建一个均值和方差表。

生成数据 :

set.seed(1001)
d <- expand.grid(f1=LETTERS[1:3],f2=letters[1:3],
f3=factor(as.character(as.roman(1:3))),rep=1:4)
d$y <- runif(nrow(d))
d$z <- rnorm(nrow(d))

所需的输出 :
  f1 f2  f3    y.mean      y.var
1 A a I 0.6502307 0.09537958
2 A a II 0.4876630 0.11079670
3 A a III 0.3102926 0.20280568
4 A b I 0.3914084 0.05869310
5 A b II 0.5257355 0.21863126
6 A b III 0.3356860 0.07943314
... etc. ...

使用 aggregate/merge :
library(reshape)
m1 <- aggregate(y~f1*f2*f3,data=d,FUN=mean)
m2 <- aggregate(y~f1*f2*f3,data=d,FUN=var)
mvtab <- merge(rename(m1,c(y="y.mean")),
rename(m2,c(y="y.var")))

使用 ddply/summarise (可能是最好的,但一直无法使其工作):
mvtab2 <- ddply(subset(d,select=-c(z,rep)),
.(f1,f2,f3),
summarise,numcolwise(mean),numcolwise(var))

结果是
Error in output[[var]][rng] <- df[[var]] : 
incompatible types (from closure to logical) in subassignment type fix

使用 melt/cast (也许最好?)
mvtab3 <- cast(melt(subset(d,select=-c(z,rep)),
id.vars=1:3),
...~.,fun.aggregate=c(mean,var))
## now have to drop "variable"
mvtab3 <- subset(mvtab3,select=-variable)
## also should rename response variables

不会 (?) 在 reshape2 中工作.讲解 ...~.对某人来说可能很棘手!

最佳答案

我有点不解。这行不通:

mvtab2 <- ddply(d,.(f1,f2,f3),
summarise,y.mean = mean(y),y.var = var(y))

这给了我这样的东西:
   f1 f2  f3    y.mean       y.var
1 A a I 0.6502307 0.095379578
2 A a II 0.4876630 0.110796695
3 A a III 0.3102926 0.202805677
4 A b I 0.3914084 0.058693103
5 A b II 0.5257355 0.218631264

这是正确的形式,但看起来值与您指定的值不同。

编辑

以下是如何使用 numcolwise 制作您的版本工作:
mvtab2 <- ddply(subset(d,select=-c(z,rep)),.(f1,f2,f3),summarise,
y.mean = numcolwise(mean)(piece),
y.var = numcolwise(var)(piece))

您忘记将实际数据传递给 numcolwise .然后是小 ddply每件作品都被称为的技巧 piece内部。 (不应该依赖 Hadley 在评论中指出的内容,因为它可能会在 plyr 的 future 版本中发生变化。)

关于r - 构建均值/方差汇总表的快速/优雅方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7449198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com