【问题标题】:Histogram in R with 1 bin for zeros onlyR 中的直方图,1 个 bin 仅用于零
【发布时间】:2021-12-13 02:57:55
【问题描述】:

是否可以在 R 中使用不同大小的 bin 制作直方图?我正在处理计数数据,并且零需要有自己的 bin,但其他数字可以合并到任何有意义的值中。所有鱼数的单个直方图都可以。

fish<-structure(list(num = c(0, 11, 1, 0, 
                             13, 11, 0, 1, 0, 0, 11, 11, 0, 10, 1, 0, 0, 0, 0, 0, 0, 0, 
                             0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 9, 0, 2, 1, 0, 
                             7, 6, 0, 4, 8, 0, 8, 6, 0)), 
                class = "data.frame", row.names = c(NA,-50L))

【问题讨论】:

  • 或许可以试试:barplot(table(fish$num)) ?
  • 关闭,但也没有办法将其他数字分箱?这只是一个虚构的数据集,真实的数据集有 142 个唯一数字,因此每个数字的 bin 会变得非常薄。
  • 尝试剪切? barplot(table(cut(fish$num, c(-1, seq(0, 15, 3)))), space = 0)
  • 够了,哈哈。谢谢!

标签: r histogram


【解决方案1】:

使用 cut 自己有 0,然后使用 seq 创建 bins:

barplot(table(cut(fish$num, c(0, seq(1, 15, 3)), right = FALSE)), space = 0)


编辑:第一条只包含零,见:

table(fish$num)
# 0  1  2  4  6  7  8  9 10 11 13 
#31  4  1  1  2  1  2  1  1  4  2 

table(cut(fish$num, c(0, seq(1, 15, 3)), right = FALSE))
#  [0,1)   [1,4)   [4,7)  [7,10) [10,13) 
#     31       5       3       4       5 

【讨论】:

  • 第一个 bin 是否包含 1?我认为这效果更好: barplot(table(cut(fish$num, c(-1, seq(0, 15, 3)))), space = 0)
  • @Nate 查看编辑,第一栏只包含 0。
  • 完美,谢谢!
【解决方案2】:

您可以使用breaks 参数为hist() 函数指定任何您想要的中断。您应该将其与freq = TRUE 参数结合使用,否则您将获得密度图,并且零处的密度将是无限的。虽然情节看起来不太好,因为零箱没有宽度:

hist(fish$num, breaks = c(0, 0, 5, 10, 15, 20), freq=TRUE)

我不确定你想做什么。

【讨论】:

  • 也许将中断更改为 c(0, 1, 5, 10, 15, 20) 以获取 0 值的栏。
  • @zx8754,我认为您放弃直方图并使用条形图的想法更好。我可能会尝试手动设置标签,例如c("0", "1-5", "6-10", "11-15").
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
相关资源
最近更新 更多