r - 频率分布的中位数

标签 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() 对每个样本的频率分布来完成,但所有尝试都失败了。

你有什么建议吗?

最佳答案

这可能不是最优雅的方式,但它有效:基本上,我根据 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

关于r - 频率分布的中位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14465004/

相关文章:

r - 在 R 中给定条件下查找与另一个值最接近的值的位置

r - 在两个 ggplot 直方图上显示均值和中值

python - 如何有效地计算运行中位数

sql - 在 Oracle 中创建直方图/频率分布的最佳方法?

r - 为什么 rep() 的行为与这个简单的 R 示例不一致?

r - 如何在 R 中进行基于目标的编码

arrays - 在未排序的数组中查找中位数(仅限于使用在线性中查找季度元素的子例程)

python - 欺诈事件通知问题 - 降低时间复杂度

python - 在Python中创建频数分布表

r - 使用R计算中位数而不复制元素