我想计算大量样本的频率分布的中位数。每个样本都有多个类别(示例中为 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/