Агрегировать, чтобы найти взвешенное медианное значение

У меня есть следующий набор данных:

df <- data.frame(
  C      = c(1,2,3,1,2,3,1,2,3,1),
  weight = c(1,1.5,2,2,1.5,1,2,1,1.5,2.5),
  time   = c(15,20,30,45,60,15,20,30,45,60)
)

Мне нужно агрегировать данные по переменной C, чтобы найти среднее время для каждой C. Каждое наблюдение взвешивается с помощью переменной «вес».

Есть ли способ заменить «среднее» на взвешенную медиану в следующем коде?

output<-aggregate(.~C, data=df, mean, na.rm=TRUE)

person user2568648    schedule 23.01.2014    source источник


Ответы (1)


В пакете bigvis на github есть взвешенная медианная функция.

library(devtools)
install_github("bigvis")

aggregate не работает с функциями, которым требуется несколько векторных входов. Вместо этого используйте ddply из plyr.

library(plyr)
ddply(df, .(C), summarise, wm = weighted.median(time, weight))
person Richie Cotton    schedule 23.01.2014
comment
При попытке установить bigvis я получаю следующую ошибку: Ошибка в функции (type, msg, asError = TRUE): не удалось разрешить host: github.com; Хост не найден - person user2568648; 23.01.2014
comment
@ user2568648 Вы в корпоративной сети? Если это так, наиболее вероятным объяснением является то, что доступ к github заблокирован администраторами вашей сети. Попробуйте зайти на сайт в браузере. - person Richie Cotton; 23.01.2014