2017-06-06 33 views
1

我有一個由1到6之間的一系列非常長的整數組成的矩陣。我想創建一個與原始矩陣和6列相同長度的輸出矩陣(最大值在原始矩陣),其中1重複n次整數值列中第一個遇到的整數的值。 (即如果第一個值是6,它將在輸出矩陣的第6列中重複1 x 6次,然後原始矩陣的第7行中的值將用於下一個重複序列。下面,是否有一個有效的方法中的R要這樣做嗎?條件序列重複在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

我編輯了第二個例子。 – user3690243

回答

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 
+1

這真的很棒,完全是我以前的樣子。非常感謝你提供答案。 – user3690243

+0

很高興幫助! :) – User2321