从R中的直方图获取频率值

MiM*_*iMi 38 r frequency histogram

我知道如何绘制直方图或其他频率/百分比相关表.但是现在我想知道,如何在表格中使用这些频率值以便在事后使用.

我有一个庞大的数据集,现在我绘制一个设置binwidth的直方图.我想提取对应于每个binwidth的频率值(即y轴上的值)并将其保存在某处.

有人可以帮我这个吗?谢谢!

rcs*_*rcs 48

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"
Run Code Online (Sandbox Code Playgroud)

  • 你还应该注意他应该使用`plot = FALSE`,这样他才能得到结果而不用绘制直方图. (7认同)
  • @xealits:`表(cut(rnorm(100),breaks = c(-Inf,-1,1,Inf)))` (2认同)

Nic*_*bbe 20

来自?hist:价值

"histogram"类的对象,它是一个包含组件的列表:

  • 打破n + 1个单元格边界(=如果是向量则断开).这些是名义上的中断,而不是边界模糊.
  • 计数n个整数; 对于每个单元格,x []内部的数量.
  • 密度值f ^(x [i]),作为估计的密度值.如果全部(diff(break)== 1),则它们是相对频率count/n并且通常满足sum [i; f ^(x [i])(b [i + 1] -b [i])] = 1,其中b [i] = break [i].
  • 强度与密度相同.已弃用,但保留兼容性.
  • 中等n个细胞中点.
  • xname是具有实际x参数名称的字符串.
  • equidist logical,表示中断之间的距离是否相同.

breaksdensity提供您所需要的一切:

histrv<-hist(x)
histrv$breaks
histrv$density
Run Code Online (Sandbox Code Playgroud)


Pat*_*ckT 9

万一有人打这个问题ggplotgeom_histogram考虑,请注意,有一种方法来从ggplot对象提取数据。

下面的便利函数输出一个数据帧,其中包含每个 bin 的下限 ( xmin)、每个 bin的上限 ( xmax)、每个 bin 的中点 ( 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")
Run Code Online (Sandbox Code Playgroud)

插图:

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
Run Code Online (Sandbox Code Playgroud)

我在这里回答了一个相关的问题(带有 ggplot2 的累积直方图)。