按R分组,D加权平均
我试图在R中做一个“GROUPBY”风格的加权平均值。使用一些基本平均值,下面的代码(使用Hadley的plyr包)运行良好按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,.(
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))