如何将 table() 转换为 r 中的矩阵

rav*_*avi 7 r matrix

我有一个 6x6 矩阵,如下所示:

M = matrix(0,nrow = 6, ncol = 6);
for(i in 1:6)
  for(j in 1:6)
    M[i,j]<- i+j
Run Code Online (Sandbox Code Playgroud)

M 是具有元素的 6x6 矩阵:

     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    2    3    4    5    6    7
[2,]    3    4    5    6    7    8
[3,]    4    5    6    7    8    9
[4,]    5    6    7    8    9   10
[5,]    6    7    8    9   10   11
[6,]    7    8    9   10   11   12
Run Code Online (Sandbox Code Playgroud)

我想使用 r 函数 table() 从上面的矩阵 M 中导出具有频率的元素矩阵。

table(M) 的输出是:

> table(M)
M
 2  3  4  5  6  7  8  9 10 11 12 
 1  2  3  4  5  6  5  4  3  2  1 
Run Code Online (Sandbox Code Playgroud)

如何从 table(M) 输出简单地制作 11x2 矩阵?

我试过 as.matrix(table(M)) 但它使元素作为行名称,尽管我不确定发生了什么!

> as.matrix(table(M))
   [,1]
2     1
3     2
4     3
5     4
6     5
7     6
8     5
9     4
10    3
11    2
12    1
Run Code Online (Sandbox Code Playgroud)

如建议:

DF <- data.frame(table(M))
ma <- data.matrix(DF)

      M Freq
 [1,]  1    1
 [2,]  2    2
 [3,]  3    3
 [4,]  4    4
 [5,]  5    5
 [6,]  6    6
 [7,]  7    5
 [8,]  8    4
 [9,]  9    3
[10,] 10    2
[11,] 11    1
Run Code Online (Sandbox Code Playgroud)

第一列已更改。每个元素减1。为什么?

Dan*_*man 8

尝试matrix代替as.matrix

matrix(M, ncol = ncol(M), dimnames = dimnames(M))
Run Code Online (Sandbox Code Playgroud)


rav*_*avi 3

我终于找到了答案。

DF <- data.frame(table(M))
pmfY <- apply(as.matrix.noquote(DF),2,as.numeric)
Run Code Online (Sandbox Code Playgroud)

pmfY 的输出与 table(M) 完全相同。

pmfY
       M Freq
 [1,]  2    1
 [2,]  3    2
 [3,]  4    3
 [4,]  5    4
 [5,]  6    5
 [6,]  7    6
 [7,]  8    5
 [8,]  9    4
 [9,] 10    3
[10,] 11    2
[11,] 12    1
Run Code Online (Sandbox Code Playgroud)