在 RI 中,想要创建一个基于计数数据而不是原始数据的箱线图。所以我的表模式看起来像
Value | 计数
1 | 2
2 | 1
...
代替
值
1
1
2
...
在第二种情况下,我可以简单地做 boxplot(x)
我确信有一种方法可以用已经汇总的数据做你想做的事,但如果没有,你可以滥用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 包裹起来,你就应该得到你想要的。我确信有一种更有效/更好的方法可以做到这一点,但这应该对你有用。
如果分类需要另一个变量,可以使用 和 的组合作为rep
一种方法data.frame
例如。
with(data.frame(v1=rep(data$v1,data$count),v2=(data$v2,data$count)),
boxplot(v1 ~ v2)
)
我最近通过使用“rep”函数对每列计数使用“apply”函数解决了一个类似的问题:
> datablock <- apply(countblock[-1], 2, function(x){rep(countblock$value, x)})
> boxplot(datablock)
...以上假设您的值位于第一列,后续列包含计数数据。
玩具数据:
(除了Value
and 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)