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