我有一个矩阵,我想转换成一个二进制输出(0对1).要转换的矩阵包含四行排名(1到4):
mat1.data <- c(4, 3, 3, 3, 3, 2, 2, 1, 1, 1,
3, 4, 2, 4, 2, 3, 1, 3, 3, 2,
2, 2, 4, 1, 1, 1, 4, 4, 2, 4,
1, 1, 1, 2, 4, 4, 3, 2, 4, 3)
mat1 <- matrix(mat1.data,nrow=4,ncol=10,byrow=TRUE)
mat1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 4 3 3 3 3 2 2 1 1 1
[2,] 3 4 2 4 2 3 1 3 3 2
[3,] 2 2 4 1 1 1 4 4 2 4
[4,] 1 1 1 2 4 4 3 2 4 3
在二进制输出矩阵中,当特定排名为真时,每个行条目显示1,否则显示0.转换过程从排名1开始,以排名4结束,因此原始矩阵的每一行应在输出矩阵中产生10×4=40个条目.例如,对于排名4 3 3 3 3 2 2 1 1 1
的第一行,输出应为
0 0 0 0 0 0 0 1 1 1
0 0 0 0 0 1 1 0 0 0
0 1 1 1 1 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
继续此过程,所有四行排名的预期输出应如下所示:
0 0 0 0 0 0 0 1 1 1 #first row of rankings starts
0 0 0 0 0 1 1 0 0 0
0 1 1 1 1 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 #first row of rankings ends
0 0 0 0 0 0 1 0 0 0 #second row of rankings starts
0 0 1 0 1 0 0 0 0 1
1 0 0 0 0 1 0 1 1 0
0 1 0 1 0 0 0 0 0 0 #second row of rankings ends
0 0 0 1 1 1 0 0 0 0 #third row of rankings starts
1 1 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 1 1 0 1 #third row of rankings ends
1 1 1 0 0 0 0 0 0 0 #fourth row of rankings starts
0 0 0 1 0 0 0 1 0 0
0 0 0 0 0 0 1 0 0 1
0 0 0 0 1 1 0 0 1 0 #fourth row of rankings ends
我如何做到这一点?我有一个更大的数据集,所以更有效的方法是首选,但任何帮助将不胜感激!