web-dev-qa-db-ja.com

Rのヒストグラムから頻度値を取得する

ヒストグラムまたは他の頻度/パーセンテージ関連の表を描く方法を知っています。しかし、今、知りたいのですが、テーブルの中でそれらの頻度値を取得して、事後に使用する方法はありますか。

大規模なデータセットがありますが、現在、binwidthを設定したヒストグラムを描画しています。各ビン幅に対応する頻度値(つまり、y軸の値)を抽出し、どこかに保存したいと思います。

誰かがこれを手伝ってくれますか?ありがとうございました!

36
MiMi

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"
46
rcs

?histから:値

コンポーネントを持つリストであるクラス「ヒストグラム」のオブジェクト:

  • n + 1個のセル境界を分割します(=ベクトルの場合は分割します)。これらは、境界ファズではなく、公称ブレークです。
  • n個の整数をカウントします。各セルについて、内部のx []の数。
  • 推定密度値としての密度値f ^(x [i])。 all(diff(breaks)== 1)の場合、それらは相対頻度count/nであり、一般にsum [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
20
Nick Sabbe

誰かがggplotgeom_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の累積ヒストグラム )。

3
PatrickT