从直方图中获取频率值R
问题描述:
我知道如何绘制直方图或其他频率/百分比相关的表格。 但是现在我想知道,如何在表格中获得这些频率值以便在事后使用。从直方图中获取频率值R
我有一个海量数据集,现在我绘制了一个带有一组binwidth的直方图。我想提取与每个binwidth对应的频率值(即y轴上的值)并将其保存在某处。
有人可以帮助我吗? 谢谢!
答
从?hist
: 值
类 “直方图”,这是与组件的列表的对象:
- 休息第n + 1个小区边界(=断裂,如果这是一个向量)。 这些是名义上的中断,而不是边界模糊。
- 统计n个整数;对于每个单元格,里面的x []的数量。
- 密度值f ^(x [i])作为估计的密度值。如果 全部(diff(中断)== 1),它们是相对频率计数/ n 并且通常满足和[i; f [(x [i])(b [i + 1] -b [i])] = 1,其中b [i] =中断[i]。
- 强度与密度相同。已弃用,但保留为 兼容性。
- 将n个细胞中点定位。
- xname具有实际x参数名称的字符串。
- equidist逻辑,指示断点之间的距离是否都是 相同。
breaks
和density
提供几乎所有你需要:
histrv<-hist(x)
histrv$breaks
histrv$density
答
的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"
答
以防万一有人打考虑到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
一个相关的问题我回答了这里(Cumulative histogram with ggplot2)。
Aaaah,刚刚得到了相同的想法,并想发布这个!你的速度更快:-) – TMS
你还应该注意到他应该使用'plot = FALSE',这样他才能得到结果而不绘制直方图。 – TMS
有没有一种方法没有hist? 我想使用自定义休息的hist,它不起作用。还有别的吗? – xealits