Как рассчитать медиану по сгруппированному набору данных?

Мой набор данных выглядит следующим образом:

salary  number
1500-1600   110
1600-1700   180
1700-1800   320
1800-1900   460
1900-2000   850
2000-2100   250
2100-2200   130
2200-2300   70
2300-2400   20
2400-2500   10

Как я могу рассчитать медиану этого набора данных? Вот что я попробовал:

x <- c(110, 180, 320, 460, 850, 250, 130, 70, 20, 10)
colnames <- "numbers"
rownames <- c("[1500-1600]", "(1600-1700]", "(1700-1800]", "(1800-1900]", 
              "(1900-2000]", "(2000,2100]", "(2100-2200]", "(2200-2300]",
              "(2300-2400]", "(2400-2500]")
y <- matrix(x, nrow=length(x), dimnames=list(rownames, colnames))
data.frame(y, "cumsum"=cumsum(y))

            numbers cumsum
[1500-1600]     110    110
(1600-1700]     180    290
(1700-1800]     320    610
(1800-1900]     460   1070
(1900-2000]     850   1920
(2000,2100]     250   2170
(2100-2200]     130   2300
(2200-2300]      70   2370
(2300-2400]      20   2390
(2400-2500]      10   2400

Здесь вы можете увидеть половину частоты2400/2=1200, Это между1070 а также1920, Таким образомсредний класс это(1900-2000] группа. Вы можете использовать формулу ниже, чтобы получить этот результат:

Медиана = L + h / f (n / 2 - c)

где:

L является границей нижнего класса медианного класса
h это размер среднего класса, то есть разница между верхним и нижним границами среднего класса
f частота среднего класса
c предыдущая кумулятивная частота среднего класса
п / 2 общее количество наблюдений, разделенных на 2 (т.е. суммаf / 2)

С другой стороны,средний класс определяется следующим методом:

Найдите n / 2 в столбце кумулятивной частоты.

Получить класс, в котором это лежит.

И в коде:

> 1900 + (1200 - 1070) / (1920 - 1070) * (2000 - 1900)    
[1] 1915.294

Теперь я хочу сделать вышеприведенное выражение более элегантным, т.е.1900+(1200-1070)/(1920-1070)*(2000-1900), Как мне этого добиться?

Ответы на вопрос(6)

Ваш ответ на вопрос