web-dev-qa-db-ja.com

因子変数の頻度ヒストグラムを作成する

私はRが初めてなので、そのような基本的な質問をおaびします。私はこの問題をグーグルで1時間費やしましたが、解決策を見つけることができませんでした。

一般的なペットの種類に関するデータセットにカテゴリデータがあるとします。さまざまな種類の動物の名前を含むRの文字ベクトルとして入力します。このように作成しました:

animals <- c("cat", "dog",  "dog", "dog", "dog", "dog", "dog", "dog", "cat", "cat", "bird")

データフレーム内の他のベクターで使用するための要素に変換します。

animalFactor <- as.factor(animals)

次に、y軸に各変数の頻度、x軸に各因子の名前を示し、各因子に1つのバーを含むヒストグラムを作成します。私はこのコードを試みます:

hist(table(animalFactor), freq=TRUE, xlab = levels(animalFactor), ylab = "Frequencies")

出力は、私が期待するようなものではありません。ラベル付けの問題はさておき、カテゴリごとに単純な頻度ヒストグラムを作成する方法を理解できないようです。

37
OnlyDean

barplot(prop.table(table(animals)))が必要なようです:

enter image description here

ただし、これはヒストグラムではありません。

58
Roland

ggplotでこれを行いたい場合、geom_histogram()にAPIの変更が加えられ、エラーが発生します: https://github.com/hadley/ggplot2/issues/ 1465

これを回避するには、geom_bar()を使用します。

animals <- c("cat", "dog",  "dog", "dog", "dog", "dog", "dog", "dog", "cat", "cat", "bird")

library(ggplot2)
# counts
ggplot(data.frame(animals), aes(x=animals)) +
  geom_bar()

enter image description here

18
Megatron

予期しない結果が得られる理由は、hist(...)が数値ベクトルから分布を計算するためです。コードでは、table(animalFactor)は1、3、7の3つの要素を持つ数値ベクトルのように動作します。したがって、hist(...)は1の数(1)、3の数(1)、および数7の(1)。 @Rolandのソリューションは最も簡単です。

ggplotを使用してこれを行う方法を次に示します。

library(ggplot2)
ggp <- ggplot(data.frame(animals),aes(x=animals))
# counts
ggp + geom_histogram(fill="lightgreen")
# proportion
ggp + geom_histogram(fill="lightblue",aes(y=..count../sum(..count..)))

上記のコードでanimalFactorの代わりにanimalsを使用しても、まったく同じ結果が得られます。

14
jlhoward

国はカテゴリ変数であり、データセットに存在する国の数を確認したいと思います。言い換えれば、各国からのレコード/参加者の数

barplot(summary(df$Country))
2
Mams_84

因子としてのデータは、プロット関数への入力として使用できます。

同様の質問に対する回答がここにあります: https://stat.ethz.ch/pipermail/r-help/2010-December/261873.html

 x=sample(c("Richard", "Minnie", "Albert", "Helen", "Joe", "Kingston"),  
 50, replace=T)
 x=as.factor(x)
 plot(x)
1
rafaelvalle