Блочная диаграмма предварительно агрегированных/сгруппированных данных в R

В R я хочу создать диаграмму по данным подсчета вместо необработанных данных. Итак, схема моей таблицы выглядит так:

Значение | Количество
1 | 2
2 | 1

...

Вместо

Значение
1
1
2
...

Где во втором случае я мог бы просто сделать boxplot(x)


person John Montague    schedule 28.10.2011    source источник
comment
Итак, какой график вы ожидаете. Это всего два значения счетчика, и диаграмма будет довольно странной. Возможно, вы имеете в виду гистограмму?   -  person IRTFM    schedule 28.10.2011
comment
Это просто пример данных, в моем реальном наборе данных гораздо больше строк.   -  person John Montague    schedule 28.10.2011


Ответы (4)


Я уверен, что есть способ сделать то, что вы хотите, с уже суммированными данными, но если нет, вы можете злоупотребить тем фактом, что rep принимает векторы:

> dat <- data.frame(Value = 1:5, Count = sample.int(5))
> dat
  Value Count
1     1     1
2     2     3
3     3     4
4     4     2
5     5     5
> rep(dat$Value, dat$Count)
 [1] 1 2 2 2 3 3 3 3 4 4 5 5 5 5 5

Просто оберните boxplot вокруг этого, и вы должны получить то, что хотите. Я уверен, что есть более эффективный/лучший способ сделать это, но это должно сработать для вас.

person Chase    schedule 28.10.2011
comment
Это работает, но в моем случае это очень болезненно, потому что я хотел сделать на своем графике блок-графики нескольких категорий (в дополнение к значению, количеству). Но се ля ви. Спасибо за предложение! - person John Montague; 29.10.2011
comment
@Джон, не беспокойся. Мое другое предложение - посмотреть на ggplot2. Я знаю, что вы можете передать туда предварительно обобщенные данные. Извините, я редко использую базовую графику: had.co.nz/ggplot2/geom_boxplot.html - person Chase; 29.10.2011

Недавно я решил аналогичную проблему, используя функцию «применить» для каждого столбца счетчиков с функцией «реп»:

> datablock <- apply(countblock[-1], 2, function(x){rep(countblock$value, x)})
> boxplot(datablock)

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

person ahelpfulguest    schedule 06.05.2013

Комбинацию rep и data.frame можно использовать в качестве подхода, если для классификации требуется другая переменная.

Eg.

with(data.frame(v1=rep(data$v1,data$count),v2=(data$v2,data$count)),
    boxplot(v1 ~ v2)
)

person jnas    schedule 19.06.2013

Данные игрушки:

(помимо Value и Count я добавляю категориальную переменную Group)

set.seed(12345)
df <- data.frame(Value = sample(1:100, 100, replace = T),
                 Count = sample(1:10, 100, replace = T),
                 Group = sample(c("A", "B", "C"), 100, replace = T),
                 stringsAsFactors = F)

Используйте purrr::pmap и purrr::reduce для управления фреймом данных:

library(purrr)
data <- pmap(df, function(Value, Count, Group){
  data.frame(x = rep(Value, Count),
             y = rep(Group, Count))
}) %>% reduce(rbind)

boxplot(x ~ y, data = data)

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

person Darren Tsai    schedule 21.12.2018