将多个直方图频率计数转换为R中的数组

时间:2013-07-24 14:23:45

标签: r

对于矩阵“结果”中的每一行,如下所示

            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个区间,如下所示:

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

Histogram for row 1( 3 bins)

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

       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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

您可以访问由counts返回的hist向量(有关详细信息,请参阅?hist):

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