Подтвердить что ты не робот

Сделать частотную гистограмму для переменных факторов

Я очень новичок в R, поэтому я извиняюсь за такой основной вопрос. Я потратил час на поиск этой проблемы, но не смог найти решение.

Скажем, у меня есть некоторые категориальные данные в моем наборе данных о распространенных типах домашних животных. Я ввожу его как вектор символов в R, который содержит имена разных типов животных. Я создал его следующим образом:

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

Я превращаю его в фактор для использования с другими векторами в моем кадре данных:

animalFactor <- as.factor(animals)

Теперь я хочу создать гистограмму, которая показывает частоту каждой переменной по оси y, имя каждого фактора по оси x и содержит по одному бару для каждого коэффициента. Я пытаюсь выполнить этот код:

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

Выход абсолютно ничего подобного, как я ожидал. Отмечая проблемы в стороне, я не могу понять, как создать простую гистограмму частоты по категориям.

4b9b3361

Ответ 1

Кажется, что вы хотите barplot(prop.table(table(animals))):

enter image description here

Однако это не гистограмма.

Ответ 2

Причина, по которой вы получаете неожиданный результат, заключается в том, что hist(...) вычисляет распределение из числового вектора. В вашем коде table(animalFactor) ведет себя как числовой вектор с тремя элементами: 1, 3, 7. Итак, 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 в приведенном выше коде.

Ответ 3

Если вы хотите сделать это в ggplot, было изменено API на geom_histogram(), что приводит к ошибке: 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()

введите описание изображения здесь

Ответ 4

Страна является категориальной переменной, и я хочу видеть, сколько местностей страны существует в наборе данных. Другими словами, сколько записей/участников из каждой страны

barplot(summary(df$Country))

Ответ 5

Данные как коэффициент могут использоваться как входные данные для функции графика.

Ответ на аналогичный вопрос приведен здесь: 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)