在R中我想在计数数据而不是原始数据上创建一个箱线图。所以我的表架构看起来像是
价值|伯爵
1 | 2
2 | 1
...
而不是
价值
1
1
2
...
在第二种情况下我可以简单地做boxplot(x)
答案 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)
如果分类需要另一个变量,rep
和data.frame
的组合可用作方法
例如
with(data.frame(v1=rep(data$v1,data$count),v2=(data$v2,data$count)),
boxplot(v1 ~ v2)
)
答案 3 :(得分:0)
玩具数据:
(除了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)