频率分布的中位数
Posted
技术标签:
【中文标题】频率分布的中位数【英文标题】:Median of a frequency distribution 【发布时间】:2013-01-06 01:32:08 【问题描述】:我想计算大量样本的。每个样本都有多个类别(示例中为 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()
来完成,但所有尝试都失败了。
你有什么建议吗?
【问题讨论】:
您能解释一下您是如何计算出中位数为 19.5 的吗?由于第 1 类的最大值为 14,因此中位数肯定低于 14。请解释您的数据的含义。 @Andrie 他的第一个样本有 1 个值为 12 和 1 个值为 27(样本是行,而不是列——这是一种设置数据集的奇怪方式......)。 @JonathanChristensen Aha @user12975 请问这是什么数据?我不禁好奇,不管样本多大,每个样本只取三个值的数据,但每次三个值都不一样…… 实际上每个样本有 8 个类。每个样本都是一个“人口普查单位”。我知道每个样本中有多少给定大小之间的属性,以及每个样本和类的平均大小是多少。两个不同的样本通常具有不同的平均大小。混乱是数据提供者尽最大努力汇总名义数据以避免研究人员对人们拥有什么或砍伐森林了解太多的结果。 【参考方案1】:这可能不是最优雅的方式,但它确实有效:基本上,我正在从 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
【讨论】:
非常感谢!我仍在努力了解它是怎么回事,它与我尝试的东西无关......以上是关于频率分布的中位数的主要内容,如果未能解决你的问题,请参考以下文章