根据值的计数计算中位数

Calculate median based on counts of value

我有以下数据框:

   numbers Freq
1        4    2
2        5    1
3       23    2
4       34    2

我知道当频率为 1 (median(`numbers`, na.rm = TRUE)) 时如何计算 r 中的中值,但是当频率不同于 1 时如何计算?

我们可以用 != 创建一个逻辑索引,用它来对 'numbers' 列进行子集化并得到 median

with(df1, median(numbers[Freq != 1], na.rm = TRUE))
#[1] 23

数据

df1 <- structure(list(numbers = c(4L, 5L, 23L, 34L), Freq = c(2L, 1L, 
2L, 2L)), class = "data.frame", row.names = c("1", "2", "3", 
"4"))

这是另一个使用 tapplysubset

的选项
> with(subset(df,Freq != 1),tapply(numbers,Freq,median,na.rm = TRUE))
 2
23

数据

> dput(df)
structure(list(numbers = c(4L, 5L, 23L, 34L), Freq = c(2L, 1L, 
2L, 2L)), class = "data.frame", row.names = c("1", "2", "3",
"4"))