Блокпост предварительно агрегированных / сгруппированных данных в R - PullRequest
6 голосов
/ 28 октября 2011

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

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

...

Вместо

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

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

Ответы [ 4 ]

0 голосов
/ 21 декабря 2018

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

(кроме 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)

enter image description here

0 голосов
/ 06 мая 2013

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

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

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

0 голосов
/ 19 июня 2013

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

Например.

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

0 голосов
/ 28 октября 2011

Я уверен, что есть способ сделать то, что вы хотите с уже обобщенными данными, но если нет, вы можете злоупотребить тем фактом, что 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

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

...