2

我想计算大量样本的频率分布的中位数。每个样本都有多个类别(示例中为 3 个)及其各自的频率。每个类都与不同的值相关联

data <- data.frame(sample=c(1,2,3,4,5), 
                   freq_class1=c(1,1,59,10,2), 
                   freq_class2=c(1,0,35,44,22), 
                   freq_class3=c(0,4,1,9,2), 
                   value_class1=c(12,11,14,11,13), 
                   value_class2=c(27,33,34,31,29), 
                   value_class3=c(75,78,88,81,65))

例如,样本 1 的中位数为 19.5。我假设这可以使用quantile()每个样本的频率分布来完成,但所有尝试都失败了。

你有什么建议吗?

4

1 回答 1

4

这可能不是最优雅的方式,但它确实有效:基本上,我正在根据 data.frame 中包含的信息重新创建完整的数据向量,然后找到其中值。编写一个函数来完成它让我apply可以快速地对 data.frame 的每一行执行它。

find.median <- function(x) {
  full.x <- rep(x[5:7],times=x[2:4])
  return(median(full.x))
}

> apply(data,1,find.median)
[1] 19.5 78.0 14.0 31.0 29.0
于 2013-01-22T18:03:52.607 回答