【问题标题】:Creating a histogram using aggregated data使用聚合数据创建直方图
【发布时间】:2013-11-12 20:19:02
【问题描述】:

令人尴尬的简单问题...

我是 R 新手,出于某种原因,我似乎无法理解这一点。我有一个 CSV 文件,看起来像这样:

Bin,Number
1363,5
1028,4
1303,3
1467,1
1242,3
1415,5
..
.

bin 大小为 1,范围为 1000-1500。我已经阅读了我的 CSV 文件,那里似乎一切正常,但我无法生成简单的直方图。我尝试过简单地使用条形图,但数据没有按数字顺序排列,因此不会产生我需要的输出。使用这样的数据,如何在 R 中生成直方图?

一旦我有一个简单的直方图,我相信我就能玩弄它并很好地格式化它。

【问题讨论】:

  • 我推荐你阅读这个教程:statmethods.net这是一个很好的R学习资源(我经常使用它)。

标签: r csv histogram


【解决方案1】:

因为hist 函数对每个箱子中的项目进行计数,所以您需要“分解”您的“已计数”数据,例如使用rep。然后你可以在结果向量上使用hist

with(df, hist(rep(x = Bin, times = Number)))

【讨论】:

  • 如果您有足够小的数据集,则爆炸数据是可行的,但是获取聚合数据,将其扩展以传递给 hist,然后重新聚合它会浪费大量内存和 CPU,并且不会t 适用于更大的数据集。最好使用接受预聚合数据并直接构造直方图的函数,例如 CRAN 上 HistogramTools 包中的 PreBinnedHistogram
【解决方案2】:

虽然使用 base R 绝对可以做到这一点,但我总是喜欢 ggplot2 包的优雅和简洁。

例如,您可以执行以下操作:

library(ggplot2)
ggplot(data, aes(x=Bin, y=Number)) + geom_bar(stat='identity', width=1)

(如果您没有安装软件包,请先运行install.packages('ggplot2')。)

【讨论】:

    【解决方案3】:

    您的数据已经分箱,因此从该数据集中获取 R 直方图对象的最简单方法是使用 CRAN 上 HistogramTools 包中的 PreBinnedHistogram 函数。此函数采用断点列表(示例中的第 1 列)和每个 bin 的计数(第 2 列),并返回适当的 R 直方图对象以进行绘图或进一步分析,而无需先将数据集分解为未合并的形式。

    library(HistogramTools)
    my.data<-read.csv("input.csv")
    plot(PreBinnedHistogram(my.data$V1, my.data$V2))
    

    【讨论】:

      【解决方案4】:

      关键是要以正确的顺序排列您的数据。假设您的数据框称为df

      barplot(df$Number[order(df$Bin)])
      

      如果您使用barplot,只需将数据向量输入它,它就会按照向量的顺序绘制条形图。使用order 在绘图之前将它们按数字顺序排列。

      【讨论】:

      • 此解决方案的问题在于,如果文件中缺少 bin,它确实会产生错误的结果(当然,这可以预先修复)。此外,您还需要做一些工作才能很好地完成轴标记。
      猜你喜欢
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 2014-03-26
      • 1970-01-01
      相关资源
      最近更新 更多