У меня действительно большая матрица, и я хотел бы заменить ее значения с помощью справочной таблицы.
У меня есть таблица значений (которая выглядит примерно так):
Origin Destination Distance Final
1 1 1 A
1 1 2 B
1 1 3 E
1 2 2 F
1 3 1 B
1 3 2 C
2 1 1 B
2 2 1 A
2 3 3 C
3 1 1 A
3 1 2 D
3 2 1 B
3 3 2 A
...
и у меня есть матрица, которая выглядит примерно так:
x 1 1 3 1 2 1 ...
1 1 3 2 1 2 1
1 2 2 1 2 2 1
3 2 1 2 1 1 2
1 3 1 2 1 2 1
2 1 1 3 1 1 1
1 2 2 1 3 1 1
...
Я пытаюсь сопоставить имена строк моей матрицы со столбцом Origin, столбцы Matrix с столбцом Destination и значения матрицы с столбцом Distance, а затем заменить это значение на столбец Final.
Matrix равен 4000на 4000. Таблица 27 на 4
Так что, когда я закончу, это должно выглядеть следующим образом:
x 1 1 3 1 2 1 ...
1 A E C A F A
1 B B B B F A
3 D A A A B A
1 E A C A F A
2 B B C B A B
1 B B B E A A
...
В настоящее время я использую небольшой цикл, который выглядит следующим образом;
for (i in 1:nrow(CategoryTable)){
Origin <- CategoryTable[i,"O"]
Dest <- CategoryTable[i,"D"]
Distance <- CategoryTable[i,"Dist"]
Final <- CategoryTable[i,"Final"]
CategoryGrid[CategoryGrid == Distance][CategoryGrid[row.names(CategoryGrid) %in% Origin,colnames(CategoryGrid) %in% Dest]] <-CategoryTable[i,"Final"]
}
Исходя из этого вопроса ( Заменить все значения в матрице <0,1 на 0 </a>), я могу заменить все элементы, соответствующие определенному значению, или элементы, соответствующие столбцу или строке.Но я не могу сопоставить все сразу.
Активный компонент текущей попытки:
CategoryGrid[CategoryGrid == Distance][CategoryGrid[row.names(CategoryGrid) %in% Origin,colnames(CategoryGrid) %in% Dest]] <-CategoryTable[i,"Final"]
Итак, я пытался сопоставить строки и столбцы, а затем передать его каклогический вектор соответствует значению, а затем выполните присвоение RHS.
Тем не менее, на самом деле я получаю:
Error in CategoryGrid[row.names(CategoryGrid) %in% Origin, colnames(CategoryGrid) %in% :
incorrect number of dimensions
Как бы вы достигли этого?