1

私はRが初めてで、次の状況でヒストグラムを生成する方法を知りたいです:

最初に、2 つの列を持つ通常の度数分布表があります。列 A はカテゴリ (またはビン) で、列 B はそのカテゴリに該当するケースの数です。

Col A    Col B
1-10       7
11-20      4
21-30      5

この最初の頻度表から、3 つの列を含む表を作成します。列 A は再びカテゴリ (またはビン) ですが、列 B は「合計ケースの割合」であるため、カテゴリ 1-10 の場合、列 B は次のようになります。値 7/(7+4+5) = 7/16 。現在、3 番目の列 C もあり、これは「カテゴリ 1 ~ 20 の間に該当する合計ケースの割合」であるため、1 ~ 10 の場合、C 列の値は 7/(7+4) = 7/11 になります。 . 完全なテーブルは次のようになります。

Col A    Col B    Col C
1-10      7/16     7/11
11-20     4/16     4/11
21-30     5/16      0

上記の 3 列の表からヒストグラムを生成するにはどうすればよいですか? 私の X 軸はビン (1-10、11-20 など) であり、Y 軸は分数である必要がありますが、すべてのビンには 2 つの分数 (列 B と列 C) があるため、2 つの分数があります」バー」をヒストグラムのすべてのビンに適用します。

どんな助けでも大歓迎です。

4

2 に答える 2

2

データ:

dat <- data.frame(A = c("1-10", "11-20", "21-30"), B = c(7, 4, 5))

次に、比率を計算して、新しいオブジェクトを作成します。

dat2 <- rbind(B = dat$B/sum(dat$B), C = c(dat$B[1:2]/sum(dat$B[1:2]), 0))
colnames(dat2) <- dat$A

プロット:

barplot(dat2, beside = TRUE, legend = rownames(dat2))

ここに画像の説明を入力してください

于 2012-09-23T02:49:21.703 に答える
1

タイトルは、2D ヒストグラムではなく「ドッジ棒グラフ」に変更する必要があります。これは、棒グラフとは異なり、ヒストグラムは x 軸に連続的な目盛りがあり、基本的に単変量データの分布または従属因子に基づいてモデル化された単変量データの分布を比較するために使用されるためです。 . 棒グラフではなく 2D 散布図を使用して効果的に視覚化できる colB と colC を比較しようとしています。ヒストグラムを使用して colB と colC の分布を比較するより良い方法は、2 つのヒストグラムを別々にプロットし、データ ポイントの位置の変化を確認することです。

colB と colC の分布を比較したい場合は、次のコードを試してください。データの説明に従って妥当なデータを取得するために、値を切り上げました。順列によるランダム サンプリングが行われていることに注意してください。同じコードを実行するたびに、分布がわずかに変化しますが、colB と colC の間の分布の推定には影響しません。

library("ggplot2")
# 44 datapoints between 1-10
a <- rep(1:10, 4)
a <- c(a, sample(a, size=4, replace=FALSE))
# 25 datapoints between 11-20
b <- rep(11:20, 2)
b <- c(b, sample(b, size=5, replace=FALSE))
# 31 datapoints between 21-30
c <- rep(21:30, 3)
c <- c(c, sample(c, size=1, replace=FALSE))
colB <- c(a, b, c)
# 64 datapoints between 1-10
a <- rep(1:10, 6)
a <- c(a, sample(a, size=4, replace=FALSE))
# 36 datapoints between 11-20
b <- rep(11:20, 3)
b <- c(b, sample(b, size=6, replace=FALSE))
colC <- c(a, b)
df <- data.frame(cbind(colB, colC=colC))
write.table(df, file = "data")
data <- read.table("data", header=TRUE)
data
ggplot(data=data, aes(x=colB, xmin=1, xmax=30)) + stat_bin(binwidth = 1)
ggplot(data=data, aes(x=colC, xmin=1, xmax=30)) + stat_bin(binwidth = 1)

# if you want density distribution, then you can try something like this:
ggplot(data=data, aes(x=colB, y = ..density.., xmin=1, xmax=30)) + stat_bin(binwidth = 1)
ggplot(data=data, aes(x=colC, y = ..density.., xmin=1, xmax=30)) + stat_bin(binwidth = 1)

HTH -サティッシュ

于 2012-09-23T05:39:12.947 に答える