R中预聚合/分组数据的箱线图

时间:2011-10-28 18:23:52

标签: r boxplot

在R中我想在计数数据而不是原始数据上创建一个箱线图。所以我的表架构看起来像是
价值|伯爵   1 | 2
  2 | 1

    ...

而不是

价值
  1
  1
  2
    ...

在第二种情况下我可以简单地做boxplot(x)

4 个答案:

答案 0 :(得分:0)

我确信有一种方法可以使用已经汇总的数据执行您想要的操作,但如果没有,您可以滥用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包裹起来,你应该得到你想要的东西。我确信这样做的效率更高/更好,但这应该适合你。

答案 1 :(得分:0)

我最近通过'rep'函数对每列计数使用'apply'函数解决了类似的问题:

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

...以上假设您的值位于第一列,后续列包含计数数据。

答案 2 :(得分:0)

如果分类需要另一个变量,repdata.frame的组合可用作方法

例如

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

答案 3 :(得分:0)

玩具数据:

(除了ValueCount,我添加了一个类别变量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::pmappurrr::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