Мой набор данных выглядит следующим образом:как вычислить медиану на сгруппированном наборе данных?
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]
. Вы можете использовать формулу, приведенную ниже, чтобы получить этот результат:
Median = L + H/F (п/2 - с)
где:
л является нижняя граница класса медианного класса
h - размер медианного класса, т.е. разница между границами верхнего и нижнего классов медианного класса
е частота медианного класса
с является предыдущей накопленной частотой медианного класса
п/2 тотально нет. наблюдений, деленное на 2 (т.е. сумма е/2)
В качестве альтернативы, средний класс определяется следующим способом:
Расположить N/2 в столбце накопленной частоты.
Получить класс, в котором это лежит.
И в коде:
> 1900 + (1200 - 1070)/(1920 - 1070) * (2000 - 1900)
[1] 1915.294
Теперь то, что я хочу сделать, это сделать выше выражение более изящным - т.е. 1900+(1200-1070)/(1920-1070)*(2000-1900)
. Как я могу это достичь?
Что вы пробовали? Рассматривали ли вы предоставление воспроизводимого примера? http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –