【发布时间】:2020-02-23 21:03:14
【问题描述】:
我不知道有什么其他的好方法来表达标题。
我对给定的矩阵进行了热编码。例如here
> set.seed(4)
> t <- matrix(floor(runif(10, 1,9)),5,5)
[,1] [,2] [,3] [,4] [,5]
[1,] 5 3 5 3 5
[2,] 1 6 1 6 1
[3,] 3 8 3 8 3
[4,] 3 8 3 8 3
[5,] 7 1 7 1 7
> class(t)
[1] "matrix"
1_1 1_3 1_5 1_7 2_1 2_3 2_6 2_8 3_1 3_3 3_5 3_7 4_1 4_3 4_6 4_8 5_1 5_3 5_5 5_7
[1,] 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 0
[2,] 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0
[3,] 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0
[4,] 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0
[5,] 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
我一直在努力转换另一个矩阵,例如如下所示以转换为预期的形式。
[,1] [,2] [,3] [,4] [,5]
[1,] 7 4 8 1 3
[2,] 3 7 4 8 1
[3,] 1 3 7 4 8
[4,] 8 1 3 7 4
预期以下情况,其中列保持为先前的编码矩阵,但需要根据新给定矩阵中的值用0s 和1s 填充列。
1_1 1_3 1_5 1_7 2_1 2_3 2_6 2_8 3_1 3_3 3_5 3_7 4_1 4_3 4_6 4_8 5_1 5_3 5_5 5_7
[1,] 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0
[2,] 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
[3,] 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0
[4,] 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
由于列名与新给定矩阵中的值不同,我不知道如何检查新给定列值与旧列值。
任何建议或提示都会大有帮助。我整个周末都在为此苦苦挣扎。
【问题讨论】:
-
您如何确定值,即
1_5作为列名。在第二个矩阵中找不到该值 -
@akrun 列名是根据第一个矩阵给出的。
1_5表示1st列,5是该列中的唯一值之一。第二个给定矩阵不能具有第一个矩阵的值,这就是1_5列在新的预期矩阵中全为零的原因。 -
在答案stackoverflow.com/a/60264578/12158757 中,我想您可以在运行嵌套的
for循环之前再添加一行t <- unique(t)以获得预期结果
标签: r