R表由矩阵行组成

Tal*_*ree 15 r matrix

对于矩阵(as.matrix),如何生成一个行,其中行等于矩阵的行?

>table(matrix)
Run Code Online (Sandbox Code Playgroud)

>hist(matrix)
Run Code Online (Sandbox Code Playgroud)

显示矩阵中每个唯一数据值的累积和,但我想要一个表,其中行与每个矩阵行的值相同,表列是矩阵中每个唯一数据值的总和.

示例矩阵:

   1  2  3  4 
a  5  5  4  6    
b  5  5  5  5     
c  8  7  6  6   
d  2  6  6  6     
e  7  7  5  4      
Run Code Online (Sandbox Code Playgroud)

期望的输出表:

   2  4  5  6  7  8
a  0  1  2  1  0  0
b  0  0  4  0  0  0
c  0  0  0  2  1  1
d  1  0  0  3  0  0
e  0  1  1  0  2  0
Run Code Online (Sandbox Code Playgroud)

A5C*_*2T1 10

另一种方法是将您转换matrix为long data.frame(使用stack),此时您可以轻松使用table:

这是你的数据:

mymat <- structure(c(5L, 5L, 8L, 2L, 7L, 5L, 5L, 7L, 6L, 7L, 4L, 5L, 6L, 
            6L, 5L, 6L, 5L, 6L, 6L, 4L), .Dim = c(5L, 4L), .Dimnames = list(
              c("a", "b", "c", "d", "e"), c("1", "2", "3", "4")))
Run Code Online (Sandbox Code Playgroud)

这看起来很像data.frame:

head(stack(data.frame(t(mymat))))
#   values ind
# 1      5   a
# 2      5   a
# 3      4   a
# 4      6   a
# 5      5   b
# 6      5   b
Run Code Online (Sandbox Code Playgroud)

以下是我们如何使用它来创建您想要的表:

with(stack(data.frame(t(mymat))), table(ind, values))
#    values
# ind 2 4 5 6 7 8
#   a 0 1 2 1 0 0
#   b 0 0 4 0 0 0
#   c 0 0 0 2 1 1
#   d 1 0 0 3 0 0
#   e 0 1 1 0 2 0
Run Code Online (Sandbox Code Playgroud)


Gre*_*min 7

## source data
x=as.matrix(read.table(text="
   1  2  3  4 
a  5  5  4  6    
b  5  5  5  5     
c  8  7  6  6   
d  2  6  6  6     
e  7  7  5  4
"))

# result

table(rep(rownames(x),ncol(x)),c(x))

#   2 4 5 6 7 8
# a 0 1 2 1 0 0
# b 0 0 4 0 0 0
# c 0 0 0 2 1 1
# d 1 0 0 3 0 0
# e 0 1 1 0 2 0
Run Code Online (Sandbox Code Playgroud)