0

我有以下数据集:

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

1 回答 1

1

bigvisgithub上的包中有一个加权中值函数。

library(devtools)
install_github("bigvis")

aggregate不适用于需要多个向量输入的函数。使用ddplyfromplyr代替。

library(plyr)
ddply(df, .(C), summarise, wm = weighted.median(time, weight))
于 2014-01-23T10:52:22.147 回答