Как я могу создать гистограмму из агрегированных данных в R? - PullRequest
9 голосов
/ 03 февраля 2012

У меня есть фрейм данных в следующем формате:

Month       Frequency
2007-08     2
2010-11     5
2011-01     43
2011-02     52
2011-03     31
2011-04     64
2011-05     73

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

До сих пор я пробовал два подхода с командами hist () и barplot (). Проблема с Hist () заключается в том, что он не дает мне никакого способа указать, что я хочу использовать столбец частоты в вычислениях частоты для гистограммы. Проблема с barplot () заключается в том, что у меня нет никакой гибкости в выборе бинов X, и если пропущены месяцы, тогда результирующий график не будет истинной гистограммой, потому что ось x не является непрерывной.

Единственная идея, которая у меня есть сейчас, - это использовать подход barplot (), заполнить пропущенные месяцы значением 0 для частоты и использовать пробел = 0, чтобы удалить интервал между столбцами. Проблема в том, что не так просто выбрать произвольное количество бинов.

Ответы [ 4 ]

4 голосов
/ 03 февраля 2012

Чтобы получить такую ​​гибкость, возможно, вам придется копировать ваши данные.Вот один из способов сделать это с rep:

n <- 10
dat <- data.frame(
    x = sort(sample(1:50, n)),
    f = sample(1:100, n))
dat

expdat <- dat[rep(1:n, times=dat$f), "x", drop=FALSE]

Теперь ваши данные реплицированы в data.frame expdat, что позволяет вам вызывать hist с разными номерами бинов:1007 *

par(mfcol=c(1, 2))
hist(expdat$x, breaks=50, col="blue", main="50 bins")
hist(expdat$x, breaks=5, col="blue", main="5 bins")
par(mfcol=c(1, 1))

enter image description here

4 голосов
/ 03 февраля 2012

возьми гусак на ggplot2.

, если ваши данные находятся в data.frame с именем df:

ggplot(df,aes(x=Month,y=Frequency))+geom_bar(stat='identity')

или если вы хотите непрерывное время:

df$Month<-as.POSIXct(paste(df$Month, '01', sep='-'),format='%Y-%m-%d')
ggplot(df,aes(x=Month,y=Frequency))+geom_bar(stat='identity')
3 голосов
/ 22 февраля 2014

Да, rep решения будут тратить слишком много памяти в большинстве интересных / больших случаев.Пакет HistogramTools CRAN включает в себя эффективную функцию PreBinnedHistogram, которая создает базовый объект гистограммы R непосредственно из списка элементов разрешения и разрывов, как и в исходном вопросе.

0 голосов
/ 13 июня 2014

Другая возможность состоит в том, чтобы уменьшить вашу частотную переменную с помощью какого-то большого фактора, чтобы у представителя не было такой большой работы.Затем настройте масштаб вертикальной оси гистограммы на тот же коэффициент.

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