【发布时间】:2019-07-22 20:52:21
【问题描述】:
我有一个非常大的矩阵,我想使用查找表替换其中的值。
我有一个值表(看起来有点像这样):
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 列匹配,将矩阵 Colnames 与目标列匹配,将矩阵值与距离列匹配,然后用最终列替换该值。
矩阵是 4000 x 4000。 表格是 27 x 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"]
}
基于这个问题 (Replace all values in a matrix <0.1 with 0) 我可以替换所有匹配特定值或匹配列或行的东西。但我不能一次全部匹配。
当前尝试的有效成分是:
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
您将如何实现这一目标?
【问题讨论】:
-
你能提供预期的结果吗?
标签: r