【问题标题】:Converting multiple histogram frequency count into an array in R将多个直方图频率计数转换为R中的数组
【发布时间】:2013-07-24 02:15:34
【问题描述】:

对于下面显示的矩阵“结果”中的每一行

            A   B   C   D   E   F   G   H   I   J      
       1    4   6   3   5   9   9   9   3   4   4
       2    5   7   5   5   8   8   8   7   4   5
       3    7   5   4   4   7   9   7   4   4   5
       4    6   6   6   6   8   9   8   6   3   6
       5    4   5   5   5   8   8   7   4   3   7
       6    7   9   7   6   7   8   8   5   7   6
       7    5   6   6   5   8   8   7   3   3   5
       8    6   7   4   5   8   9   8   4   6   5
       9    6   8   8   6   7   7   7   7   6   6

我想用 3 个 bin 为每一行绘制一个直方图,如下所示:

samp<-result[1,]
hist(samp, breaks = 3, col="lightblue", border="pink")

现在需要将直方图频率计数转换为数组,如下所示 如果我说 4 个 bin,并且说第一个 bin 的 count=5,第二个 bin 的 count=2,第四个 bin=3。现在我想要一个包含每个 bin 中所有值的向量,来自向量中的数据结果(对于每一行)作为我的输出。

       row1  5 2 0 3

对于数百行,我想以自动方式完成,因此发布了这个问题。

最后的矩阵应该是这样的

             bin 2-4 bin 4-6 bin6-8 bin8-10
      row 1   5       2       0     3
      row 2
      row 3
      row 4
      row 5
      row 6
      row 7
      row 8
      row 9

【问题讨论】:

    标签: r


    【解决方案1】:
    DF <- read.table(text="A   B   C   D   E   F   G   H   I   J      
    1    4   6   3   5   9   9   9   3   4   4
    2    5   7   5   5   8   8   8   7   4   5
    3    7   5   4   4   7   9   7   4   4   5
    4    6   6   6   6   8   9   8   6   3   6
    5    4   5   5   5   8   8   7   4   3   7
    6    7   9   7   6   7   8   8   5   7   6
    7    5   6   6   5   8   8   7   3   3   5
    8    6   7   4   5   8   9   8   4   6   5
    9    6   8   8   6   7   7   7   7   6   6", header=TRUE)
    
    m <- as.matrix(DF)
    
    apply(m,1,function(x) hist(x,breaks = 3)$count)
    # $`1`
    # [1] 5 2 0 3
    # 
    # $`2`
    # [1] 5 0 2 3
    # 
    # $`3`
    # [1] 6 3 1
    # 
    # $`4`
    # [1] 1 6 2 1
    # 
    # $`5`
    # [1] 3 3 4
    # 
    # $`6`
    # [1] 3 4 2 1
    # 
    # $`7`
    # [1] 2 5 3
    # 
    # $`8`
    # [1] 6 3 1
    # 
    # $`9`
    # [1] 4 4 0 2
    

    请注意,根据文档,休息次数只是一个建议。如果你想在所有行中都有相同数量的中断,你应该在hist之外进行分箱:

    breaks <- 1:5*2
    t(apply(m,1,function(x) table(cut(x,breaks,include.lowest = TRUE))))
    #   [2,4] (4,6] (6,8] (8,10]
    # 1     5     2     0      3
    # 2     1     4     5      0
    # 3     4     2     3      1
    # 4     1     6     2      1
    # 5     3     3     4      0
    # 6     0     3     6      1
    # 7     2     5     3      0
    # 8     2     4     3      1
    # 9     0     4     6      0
    

    【讨论】:

      【解决方案2】:

      您可以访问hist 返回的counts 向量(详见?hist):

      counts <- hist(samp, breaks = 3, col="lightblue", border="pink")$counts
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-08
        • 2020-01-27
        • 1970-01-01
        • 2021-08-19
        • 2016-09-17
        • 1970-01-01
        • 1970-01-01
        • 2016-11-18
        相关资源
        最近更新 更多