按R分组,D加权平均

按R分组,D加权平均,r,group-by,R,Group By,我试图在R中做一个“GROUPBY”风格的加权平均值。使用一些基本平均值,下面的代码(使用Hadley的plyr包)运行良好 ddply(mydf,.(period),mean) 如果我对weighted.mean使用相同的方法,我会得到以下错误“'x'和'w'必须具有相同的长度”,我不理解这一点,因为weighted.mean部分在ddply之外工作 weighted.mean(mydf$mycol,mydf$myweight) # works just fine ddply(mydf,.(

我试图在R中做一个“GROUPBY”风格的加权平均值。使用一些基本平均值,下面的代码(使用Hadley的plyr包)运行良好

ddply(mydf,.(period),mean)
如果我对weighted.mean使用相同的方法,我会得到以下错误“'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
我想编写一个自定义函数,而不是使用weighted.mean,然后将其传递给ddply,甚至用subset从头开始编写新的函数。在我的情况下,这将是太多的工作希望,但应该有一个更聪明的解决方案与什么已经存在


thx的任何建议提前

使用匿名函数:

> 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
> 
计算萼片长度的加权平均值(按花瓣长度加权)和未加权平均值,并返回两者。

使用摘要(或摘要):


这很好。到目前为止,与匿名函数没有太多关系。看起来真的值得一看。我还没有完全理解语法/想法,但我会研究一下,谢谢你的帮助!因为没有“{}”,所以需要在一行中打印所有内容吗?我从哪里可以了解到匿名函数的一些信息?好吧,所有这些
*应用
通过
。。。函数使用匿名函数,因此您应该可以找到大量示例。将多个命令分组后,需要使用大括号。最后,您不必使用匿名函数——您也可以定义自己的函数——但使用它们可以节省键入时间:)那么
lappy(split(iris,species),weighted.mean)
或类似的smth呢?当我尝试此表单时,我在is.list(by)中得到
错误:'by'丢失了
。调试器输出是不可穿透的。这个错误从哪里来的线索?有人想试试我的数据和
ddply()
call吗?我在类似的代码中也遇到了这个错误。该错误仅在RStudio中发生。这是因为
Hmisc::summary
高于
search()
列表中的
plyr::ddply
。通过将
summary
替换为
summary
:它可以工作,并且不会与
Hmisc
产生冲突。欢迎来到地狱!或者明确使用
plyr::summary
ddply(iris, "Species", summarise, 
  wmn = weighted.mean(Sepal.Length, Petal.Length),
  mn = mean(Sepal.Length))