#r
#r
Вопрос:
У меня есть данные, в которых количество выборок было предварительно рассчитано для ячеек в диапазоне, и ячейки имеют перекрывающиеся и неравномерные размеры. Выглядит примерно так:
x2 <- data.frame("BinFrom" = c(1,1,2,2,4,4,4,5,5,5,8,8,8,9,11,14,17,18,19),
"BinTo" = c(3,6,4,8,5,8,6,10,12,6,7,15,11,10,20,20,18,19,20),
"Count" = c(1000,2400,15,2000,20,3800,10,6000,4200,10,25,3000,2800,10,1300,9000,10,5,40))
Я хочу сгенерировать гистограмму и график плотности для этих данных. Есть ли способ сделать это?
ggdensity и т.д. Ожидают расширенных данных. Я попытался форсировать этот формат, расширив среднюю точку ячеек, например:
x2 <- x2 %>% mutate(MidBin = BinFrom ((BinTo-BinFrom)/2))
xp <- x2 %>% expandRows(., "Count")
ggdensity(xp, "MidBin")
но это приводит к потере важных данных и невозможно с моим фактическим фреймом данных, поскольку расширение строк исчерпывает векторную память.
Любая помощь приветствуется
Комментарии:
1. Если этот комментарий предназначен для добавления информации к вопросу, отредактируйте вопрос. Если это ответ, опубликуйте ответ на свой вопрос и примите этот ваш ответ.
Ответ №1:
Создайте новую матрицу и базу подсчета -перекрытие
base=cbind.data.frame(base=c(min(x2$BinFrom):max(x2$BinTo)))
base$overlap=sapply(base$base,function(x) sum(x2$Count[x >= x2$BinFrom amp; x <= x2$BinTo ]))
график
ggplot(base,aes(x=base,y=overlap)) geom_bar(stat = "identity")
#or
ggplot(base,aes(x=base,y=overlap)) geom_area(alpha=0.25)