我有一个6x6矩阵,如下所示:
M = matrix(0,nrow = 6, ncol = 6);
for(i in 1:6)
for(j in 1:6)
M[i,j]<- i+j
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
我想使用r函数table()从矩阵M上方导出一个元素矩阵。
表(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
如何从表(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
正如所建议:
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
第1栏已更改。每个元素减去1.为什么?
答案 0 :(得分:2)
我终于找到了答案。
DF <- data.frame(table(M))
pmfY <- apply(as.matrix.noquote(DF),2,as.numeric)
pmfY的输出与表(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
答案 1 :(得分:0)
as.data.frame(unclass(table(M)))
答案 2 :(得分:0)
在回溯你的步骤后,...
M = matrix(0,nrow = 6, ncol = 6);
for(i in 1:6)
for(j in 1:6)
M[i,j]<- i+j
x <- table(M)
我们可以调查......发生了什么
str(x)
#> 'table' int [1:11(1d)] 1 2 3 4 5 6 5 4 3 2 ...
#> - attr(*, "dimnames")=List of 1
#> ..$ M: chr [1:11] "2" "3" "4" "5" ...
如您所见,元素已经是名称而不是值。
这就是为什么 as.matrix(table(M))
不给你元素
作为第一列中的值。相反,名称仍然是名称。
知道这一点,另一种解决方案是提取名称和
将它们作为整数添加到矩阵中:
matrix(c(as.integer(names(x)), x), ncol = 2, dimnames = list(NULL, c("M", "Freq")))
#> 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
由 reprex package (v2.0.0) 于 2021 年 4 月 23 日创建