对于矩阵(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)
## 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)