Получение значений частоты из гистограммы в R - PullRequest
36 голосов
/ 12 октября 2011

Я знаю, как рисовать гистограммы или другие таблицы частоты / процента. Но теперь я хочу знать, как я могу получить эти значения частоты в таблице для использования после факта.

У меня массивный набор данных, теперь я рисую гистограмму с заданной шириной бинарника. Я хочу извлечь значение частоты (то есть значение на оси Y), которое соответствует каждой ширине бина, и сохранить его где-нибудь.

Может кто-нибудь помочь мне с этим? Спасибо!

Ответы [ 3 ]

46 голосов
/ 12 октября 2011

Функция 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"
20 голосов
/ 12 октября 2011

С ?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.
  • эквидистический логический, указывающий, если расстояния междуПерерывы все одинаковые.

breaks и density обеспечивают почти все, что вам нужно:

histrv<-hist(x)
histrv$breaks
histrv$density
3 голосов
/ 06 ноября 2017

На всякий случай, если кто-то ответит на этот вопрос, имея в виду ggplot 's * 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 ).

...