我有一个由1到6之间的很长的一系列整数组成的矩阵。我想创建一个长度与原始矩阵相同的输出矩阵和6列(原始矩阵中的最大值) 1是在整数值的列中第一次遇到的整数的值重复n次。 (即,如果第一个值为6,它将在输出矩阵的第6列中重复1 x 6次,然后原始矩阵的第7行中的值将用于下一个重复序列。我已经显示了一个示例以下。在R中有没有一种有效的方法呢?
Original Matrix output Matrix
c1 c1 c2 c3 c4 c5 c6
R1 1 R1 1 0 0 0 0 0
R2 1 R2 1 0 0 0 0 0
R3 3 R3 0 0 1 0 0 0
R4 2 R4 0 0 1 0 0 0
R5 6 R5 0 0 1 0 0 0
R6 1 R6 1 0 0 0 0 0
R7 1 R7 1 0 0 0 0 0
R8 1 R8 1 0 0 0 0 0
R9 1 R9 1 0 0 0 0 0
R10 4 R10 0 0 0 1 0 0
R11 4 R11 0 0 0 1 0 0
R12 2 R12 0 0 0 1 0 0
R13 1 R13 0 0 0 1 0 0
R14 3 R14 0 0 1 0 0 0
R15 1 R15 0 0 1 0 0 0
输入输出矩阵的另一个例子,使我上面的例子更清晰。
Input matrix Output matrix
c1 1 2 3 4 5 6
1 2 1 0 1 0 0 0 0
2 2 2 0 1 0 0 0 0
3 1 3 1 0 0 0 0 0
4 6 4 0 0 0 0 0 1
5 3 5 0 0 0 0 0 1
6 4 6 0 0 0 0 0 1
7 5 7 0 0 0 0 0 1
8 4 8 0 0 0 0 0 1
9 5 9 0 0 0 0 0 1
10 4 10 0 0 0 1 0 0
11 3 11 0 0 0 1 0 0
12 3 12 0 0 0 1 0 0
13 2 13 0 0 0 1 0 0
14 3 14 0 0 1 0 0 0
15 4 15 0 0 1 0 0 0
16 5 16 0 0 1 0 0 0
17 5 17 0 0 0 0 1 0
18 5 18 0 0 0 0 1 0
答案 0 :(得分:1)
这是一个简单的解决方案,但它有效:
input_data <- c(1, 1, 3, 2, 6, 1, 1, 1, 1, 4, 4, 2, 1, 3, 1)
result <- matrix(0, nrow = length(input_data), ncol = 6)
counter <- 0
for (i in 1:length(input_data)){
if (counter == 0){
counter <- set_value <- input_data[i]
}
result[i, set_value] <- 1
counter <- counter - 1
}
> cbind(input_data, result)
[1,] 1 1 0 0 0 0 0
[2,] 1 1 0 0 0 0 0
[3,] 3 0 0 1 0 0 0
[4,] 2 0 0 1 0 0 0
[5,] 6 0 0 1 0 0 0
[6,] 1 1 0 0 0 0 0
[7,] 1 1 0 0 0 0 0
[8,] 1 1 0 0 0 0 0
[9,] 1 1 0 0 0 0 0
[10,] 4 0 0 0 1 0 0
[11,] 4 0 0 0 1 0 0
[12,] 2 0 0 0 1 0 0
[13,] 1 0 0 0 1 0 0
[14,] 3 0 0 1 0 0 0
[15,] 1 0 0 1 0 0 0