【问题标题】:How to compute frequency distribution in R?如何计算R中的频率分布?
【发布时间】:2026-02-15 21:30:02
【问题描述】:

其实有很多函数我不知道用什么来计算

X = rnorm(100)

假设我有一个称为 X 的正态分布向量。我对 bin 中心一无所知,我想计算 X 的频率分布

作为输出,我希望有一个频率向量和一个向量作为 bin 中心 我认为计算 bin 中心可以像

seq(min(mat[,1]),max(mat[,1]), by=0.01 ) 

您能指导我计算它并获得所需的输出吗?我必须使用哪个功能?

示例数据

0.0014985
0.0087414
0.011304
0.011619
0.013201
0.017573
0.018898
0.022491
0.023001
0.024195
0.024434
0.024469
0.028859
0.031385
0.031647
0.032224
0.033946
0.036938
0.037867
0.037993
0.038889
0.038922
0.03894
0.041474
0.041804
0.044066
0.044082
0.044962
0.047495

使用 Prism 我得到以下(bin 宽度为 0.05)

bin centres   frequency
    0           1
    0.005       0
    0.01        3
    0.015       1
    0.02        3
    0.025       4
    0.03        4
    0.035       2
    0.04        7
    0.045       4
    0.05        0

【问题讨论】:

    标签: r


    【解决方案1】:

    你可以使用 R 的 hist 函数(见?hist):

    h <- hist(X);
    

    bin 中心由下式给出

    h$mids
    

    和计数

    h$counts
    

    归一化的计数就是简单的 h$counts / sum(h$counts).

    您可以使用breaks参数指定垃圾箱(通过指定垃圾箱的数量,或直接给出垃圾箱)。

    顺便说一句,使用 R 的 cut 和 table 函数也可以实现相同的功能(请参阅?cut?table)。

    【讨论】:

    • 谢谢,但这不是我真正想要的。如果我想对 100 个向量执行此操作,并且我希望所有人都使用相同的 bin 癌症,那么它是无用的。我分享了一个真实的数据。看一下,请看我给的seq,距离为0.01,我希望能够操作bin中心
    • 我不确定是什么问题。正如我所说,您可以使用中断(在 hist 或 cut 内)显式指定 bin。这将允许您对所有数据使用相同的 bin。例如,在您的情况下,您可以执行 breaks &lt;- seq(round(min(X)), round(max(X)), by = 0.01); h &lt;- hist(X, breaks = breaks); 您只需要确保中断跨越 x 的整个范围。
    • 看看我上面展示的一个例子。我用 Prism 计算频率分布并展示了结果。但是使用 R,我无法重现这个,
    • 当然可以。我强烈建议阅读 R 对 hist 和 cut 的帮助,特别是关于如何指定中断参数的部分。要重现您的示例(顺便说一下不断变化),您需要执行 breaks &lt;- seq(0, 0.055, by = 0.005) - 0.0025; h &lt;- hist(x, breaks = breaks); print(h$mids); [1] 0.000 0.005 0.010 0.015 0.020 0.025 0.030 0.035 0.040 0.045 0.050 print(h$counts); [1] 1 0 3 1 3 4 4 2 7 4 0
    • 这里的关键是breaks参数。 Prism 为您提供 0 bin 中心,这意味着 bin 跨越 x 值 [-0.0025, +0.0025]。这可能不是很有意义;但是您可以在 R 中使用我上面指定的中断来重现它。