R使用ddply应用平均值

时间:2016-01-14 22:35:24

标签: r plyr apply

使用以下数据集,我尝试使用列Val1的权重为每个“类别”计算列Val2Wt的加权平均值。

数据:

Category,Details,Wt,Val1,Val2
A,Apple,8,3.0,12
A,Apple Gala,30,4.3,8
B,Banana,9,5.7,4
B,Banana Ripe,12,7.3,0
B,Banana Green,16,9.0,-4
C,Cantaloupe,4,10.9,-8
C,Carrot,86,13.0,-12
C,Cane,92,15.3,-16

希望通过这个来实现这一目标。

ddply (data, .(Category), summarize, function (y) {
apply(y[,4:5],2,function(x)  sum (x*Wt/sum(Wt))}
)

实际数据集要大得多。

1 个答案:

答案 0 :(得分:2)

apply内部不需要ddply(如果您使用的是summarize,则不需要ddply(data, .(Category), summarize, m1 = weighted.mean(Val1, Wt), m2 = weighted.mean(Val2, Wt)) ,这需要您定义单独的新列。)

dplyr

如果您担心效率,则应升级到library(dplyr) data %>% group_by(Category) %>% summarize( m1 = weighted.mean(Val1, Wt), m2 = weighted.mean(Val2, Wt) ) 。在这种情况下,语法非常相似:

<?php
/* https://developer.vimeo.com/api/playground/videos */
$vdata = file_get_contents('https://api.vimeo.com/videos?query='.$search.'&page='.$p.'&per_page=5&access_token='.$vimeo_token.'');
$vresponse = json_decode($vdata);
if ($vresponse->data==NULL){
echo '';    
}else{
foreach ($vresponse->data as $vresult)
{ 
//...

或者,如果你有更多专栏,你可以使用David Arenburg的评论来扩大规模。