在R中分组,ddply与weighted.mean

Mat*_*ert 9 group-by r

我试图在R中做一个"分组依据" - 样式加权平均值.有一些基本意思,下面的代码(使用Hadley的plyr包)运行良好.

ddply(mydf,.(period),mean)
Run Code Online (Sandbox Code Playgroud)

如果我使用相同的方法加权.我得到以下错误"'x'和'w'必须具有相同的长度",我不明白,因为weighted.mean部分在ddply之外工作.

weighted.mean(mydf$mycol,mydf$myweight) # works just fine
ddply(mydf,.(period),weighted.mean,mydf$mycol,mydf$myweight) # returns the erros described above
ddply(mydf,.(period),weighted.mean(mydf$mycol,mydf$myweight)) # different code same story
Run Code Online (Sandbox Code Playgroud)

我想过编写一个自定义函数而不是使用weighted.mean然后将它传递给ddply,甚至用子集从头开始编写新东西.在我的情况下,希望这将是太多的工作,但应该有一个更聪明的解决方案已经存在的东西.

thx提前任何建议!

had*_*ley 20

使用汇总(或总结):

ddply(iris, "Species", summarise, 
  wmn = weighted.mean(Sepal.Length, Petal.Length),
  mn = mean(Sepal.Length))
Run Code Online (Sandbox Code Playgroud)

  • 或者明确地使用`plyr :: summarize` (6认同)
  • 我在类似的代码上也得到了这个错误.该错误仅发生在RStudio中.这是由于`hmisc :: summarize`高于`search()`列表中的`plyr :: ddply`.[请参阅此链接](https://groups.google.com/forum/?fromgroups=#!topic/manipulatr/DF__5YfwE68).通过将`summarize`替换为`summarise`来修复它:它有效并且不会与`Hmisc`产生冲突.欢迎来到依赖地狱! (4认同)

Dir*_*tel 17

使用匿名函数:

> ddply(iris,"Species",function(X) data.frame(wmn=weighted.mean(X$Sepal.Length,
+                                                               X$Petal.Length),
+                                             mn=mean(X$Sepal.Length)))
     Species      wmn    mn
1     setosa 5.016963 5.006
2 versicolor 5.978075 5.936
3  virginica 6.641535 6.588
> 
Run Code Online (Sandbox Code Playgroud)

这计算了Sepal.Length的加权平均值(由Petal.Length加权)以及未加权平均值并返回两者.