Получение значений частоты из гистограммы в R
Я знаю, как рисовать гистограммы или другие таблицы, связанные с частотой/процентом.
Но теперь я хочу знать, как я могу получить эти значения частоты в таблице для использования после факта.
У меня массивный набор данных, теперь я рисую гистограмму с установленной шириной бина. Я хочу извлечь значение частоты (т.е. Значение по оси Y), которое соответствует каждой ширине бина и сохранить ее где-нибудь.
Может кто-нибудь, пожалуйста, помогите мне с этим?
Спасибо!
Ответы
Ответ 1
Функция hist
имеет возвращаемое значение (объект класса histogram
):
R> res <- hist(rnorm(100))
R> res
$breaks
[1] -4 -3 -2 -1 0 1 2 3 4
$counts
[1] 1 2 17 27 34 16 2 1
$intensities
[1] 0.01 0.02 0.17 0.27 0.34 0.16 0.02 0.01
$density
[1] 0.01 0.02 0.17 0.27 0.34 0.16 0.02 0.01
$mids
[1] -3.5 -2.5 -1.5 -0.5 0.5 1.5 2.5 3.5
$xname
[1] "rnorm(100)"
$equidist
[1] TRUE
attr(,"class")
[1] "histogram"
Ответ 2
От ?hist
:
Значение
объект класса "гистограмма", который представляет собой список с компонентами:
- разрывает границы n + 1 клеток (= разрывы, если это был вектор).
Это номинальные разрывы, а не граничные фузы.
- подсчитывает n целых чисел; для каждой ячейки, число x [] внутри.
- значения плотности f ^ (x [i]), как оцененные значения плотности. Если
все (diff (breaks) == 1), они являются относительными частотами count/n
и вообще удовлетворяют сумме [i; f ^ (x [i]) (b [i + 1] -b [i])] = 1, где b [i]
= breaks [i].
- интенсивности такие же, как плотность. Устаревший, но сохраненный для
совместимость.
- отображает средние точки n клеток.
- xname символьная строка с фактическим именем аргумента x.
- equidist логический, указывающий, все ли расстояния между разрывами
то же самое.
breaks
и density
предоставляют практически все, что вам нужно:
histrv<-hist(x)
histrv$breaks
histrv$density
Ответ 3
На всякий случай кто-то обращается к этому вопросу с ответом ggplot
geom_histogram
, обратите внимание, что есть способ извлечь данные из объекта ggplot.
Следующая функция удобства выводит фрейм данных с нижним пределом каждого бина (xmin
), верхний предел каждого бина (xmax
), среднюю точку каждого бункера (x
), а также как значение частоты (y
).
## Convenience function
get_hist <- function(p) {
d <- ggplot_build(p)$data[[1]]
data.frame(x = d$x, xmin = d$xmin, xmax = d$xmax, y = d$y)
}
# make a dataframe for ggplot
set.seed(1)
x = runif(100, 0, 10)
y = cumsum(x)
df <- data.frame(x = sort(x), y = y)
# make geom_histogram
p <- ggplot(data = df, aes(x = x)) +
geom_histogram(aes(y = cumsum(..count..)), binwidth = 1, boundary = 0,
color = "black", fill = "white")
Иллюстрация:
hist = get_hist(p)
head(hist$x)
## [1] 0.5 1.5 2.5 3.5 4.5 5.5
head(hist$y)
## [1] 7 13 24 38 52 57
head(hist$xmax)
## [1] 1 2 3 4 5 6
head(hist$xmin)
## [1] 0 1 2 3 4 5
Связанный вопрос, на который я ответил (Совокупная гистограмма с ggplot2).