группа в R, ddply с weighted.mean

Я пытаюсь сделать, "группа" - разрабатывает взвешенное среднее в R. С некоторыми основными средний следующий код (использующий plyr пакет от Hadley) работал хорошо.

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 или даже записать что-то новое с нуля с подмножеством. В моем случае это было бы слишком много работы, надо надеяться, но там должен более умным решением с тем, что уже там.

спасибо за любые предложения заранее!

9
задан Dirk Eddelbuettel 18 July 2010 в 22:03
поделиться

2 ответа

Используйте анонимную функцию:

> 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
> 

Она вычисляет взвешенное среднее значение Sepal.Length (взвешенное с помощью Petal.Length), а также невзвешенное среднее значение и возвращает оба значения.

17
ответ дан 4 December 2019 в 06:29
поделиться

Используйте суммирование (или суммирование):

ddply(iris, "Species", summarise, 
  wmn = weighted.mean(Sepal.Length, Petal.Length),
  mn = mean(Sepal.Length))
20
ответ дан 4 December 2019 в 06:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: