频率分布的中位数

时间:2013-01-22 17:56:23

标签: r median frequency-distribution

我想计算大量样本的频率分布的中值。每个样本具有多个类(在示例中为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()对每个样本的频率分布进行此操作,但所有尝试都失败了。

你有什么建议吗?

1 个答案:

答案 0 :(得分: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