Получите график гистограммы частот факторов (резюме)

У меня есть фактор со многими различными значениями. Если вы выполните summary(factor), результатом будет список различных значений и их частоты. Вот так:

A B C D
3 3 1 5

Я хотел бы сделать гистограмму значений частоты, т.е. ось X содержит различные частоты, которые происходят, ось Y - количество факторов, которые имеют эту конкретную частоту. Каков наилучший способ добиться чего-то подобного?

редактировать: благодаря ответу ниже я понял, что я могу получить коэффициент частот из таблицы, получить его в таблице, а затем также отобразить это, что будет выглядеть так (если f является фактором) :

plot(factor(table(f)))

person wds    schedule 27.04.2011    source источник


Ответы (1)


Обновление в свете проясненного вопроса

set.seed(1)
dat2 <- data.frame(fac = factor(sample(LETTERS, 100, replace = TRUE)))
hist(table(dat2), xlab = "Frequency of Level Occurrence", main = "")

дает:

гистограмма частоты встречаемости фактора

Здесь мы просто применяем hist() непосредственно к результату table(dat). table(dat) предоставляет частоты для каждого уровня фактора, а hist() создает гистограмму этих данных.


Исходный

Есть несколько возможностей. Ваши данные:

dat <- data.frame(fac = rep(LETTERS[1:4], times = c(3,3,1,5)))

Вот три, из первой колонки, сверху вниз:

  • Методы построения по умолчанию для класса "table" отображают данные и столбцы, подобные гистограмме.
  • Гистограмма - вероятно, это то, что вы имели в виду под гистограммой. Обратите внимание на низкое соотношение чернил и информации здесь
  • Точечный график или точечный график; показывает ту же информацию, что и другие графики, но использует гораздо меньше чернил на единицу информации. Предпочтительно.

Код для их создания:

layout(matrix(1:4, ncol = 2))
plot(table(dat), main = "plot method for class \"table\"")
barplot(table(dat), main = "barplot")
tab <- as.numeric(table(dat))
names(tab) <- names(table(dat))
dotchart(tab, main = "dotchart or dotplot")
## or just this
## dotchart(table(dat))
## and ignore the warning
layout(1)

это производит:

одномерные графики

Если у вас просто есть данные в переменной factor (кстати, неудачный выбор имени), то в моих примерах кода можно использовать table(factor), а не table(dat) или table(dat$fac).

Для полноты картины пакет lattice является более гибким, когда дело доходит до создания точечной диаграммы, поскольку мы можем получить желаемую ориентацию:

require(lattice)
with(dat, dotplot(fac, horizontal = FALSE))

давая:

Версия точечной диаграммы решетки

И версия ggplot2:

require(ggplot2)
p <- ggplot(data.frame(Freq = tab, fac = names(tab)), aes(fac, Freq)) + 
    geom_point()
p

давая:

версия ggplot2

person Gavin Simpson    schedule 27.04.2011
comment
Для получения бонусных баллов вы можете изменить порядок уровней факторов от наименьшего к наибольшему. fac_levels <- levels(dat$fac); o <- order(table(dat$fac)); dat$fac <- with(dat, factor(fac, levels = fac_levels[o])). - person Richie Cotton; 27.04.2011
comment
Я, наверное, недостаточно ясно выразился в своем вопросе. Я знаю, как это сделать. Что я хочу сделать, так это подсчитать, сколько факторов имеют частоту 1, сколько имеют частоту 2, 3, ..., а затем нанести это на гистограмму (по сути, это гистограмма, если вы ее соберете). Возможно, то, что это в факторе, не идеально, но вот так оно вышло из read.csv. Так что я хочу, это диаграмма, показывающая частоты частот. - person wds; 27.04.2011
comment
@wds Это больше похоже на то, что ты хочешь? - person Gavin Simpson; 27.04.2011
comment
это здорово спасибо. Я хотел бы на самом деле превратить это в гистограмму, возможно, с логарифмической осью y, чтобы выделить выбросы, но я думаю, что это совершенно другой вопрос. - person wds; 27.04.2011
comment
И оригинальный ответ был действительно полезен для дальнейшего анализа, еще раз спасибо. - person wds; 27.04.2011