使用行名和列名比较 R 中的矩阵
Comparing matrices in R using row and column names
我正在尝试根据行名和列名比较两个 5x5 矩阵。请注意,在矩阵 b 中,第 2 行和第 4 行的名称已交换。
a <- matrix(1:25, nrow = 5)
colnames(a) = c("col1", "col2", "col3", "col4", "col5")
rownames(a) = c("row1", "row2", "row3", "row4", "row5")
a
b <- matrix(1:25, nrow = 5)
colnames(b) = c("col1", "col2", "col3", "col4", "col5")
rownames(b) = c("row1", "row4", "row3", "row2", "row5")
b
c <- b-a
c
col1 col2 col3 col4 col5
row1 0 0 0 0 0
row4 0 0 0 0 0
row3 0 0 0 0 0
row2 0 0 0 0 0
row5 0 0 0 0 0
计算差值 c = b - a 时,代码 returns 一个零矩阵,就好像它在寻找元素在矩阵中的位置,而不是行和列索引。我希望第 4 行的结果是:
d <- a["row4",] - b["row4",]
col1 col2 col3 col4 col5
2 2 2 2 2
知道怎么做吗?
a - b[sort(rownames(b)),]
col1 col2 col3 col4 col5
row1 0 0 0 0 0
row2 -2 -2 -2 -2 -2
row3 0 0 0 0 0
row4 2 2 2 2 2
row5 0 0 0 0 0
如果列名的顺序也不同,您可以在逗号后添加一个 sort(colnames(b))
。
顺便说一句,我建议不要使用 c
作为 R
中对象的名称,因为 c
是一个 built-in 函数来创建向量。
以下示例将使用公共行和列从 a
中减去 b
。
ro <- intersect(rownames(a), rownames(b))
co <- intersect(colnames(a), colnames(b))
a[ro,co] - b[ro,co]
##> col1 col2 col3 col4 col5
##> row1 0 0 0 0 0
##> row2 -2 -2 -2 -2 -2
##> row3 0 0 0 0 0
##> row4 2 2 2 2 2
##> row5 0 0 0 0 0
我正在尝试根据行名和列名比较两个 5x5 矩阵。请注意,在矩阵 b 中,第 2 行和第 4 行的名称已交换。
a <- matrix(1:25, nrow = 5)
colnames(a) = c("col1", "col2", "col3", "col4", "col5")
rownames(a) = c("row1", "row2", "row3", "row4", "row5")
a
b <- matrix(1:25, nrow = 5)
colnames(b) = c("col1", "col2", "col3", "col4", "col5")
rownames(b) = c("row1", "row4", "row3", "row2", "row5")
b
c <- b-a
c
col1 col2 col3 col4 col5
row1 0 0 0 0 0
row4 0 0 0 0 0
row3 0 0 0 0 0
row2 0 0 0 0 0
row5 0 0 0 0 0
计算差值 c = b - a 时,代码 returns 一个零矩阵,就好像它在寻找元素在矩阵中的位置,而不是行和列索引。我希望第 4 行的结果是:
d <- a["row4",] - b["row4",]
col1 col2 col3 col4 col5
2 2 2 2 2
知道怎么做吗?
a - b[sort(rownames(b)),]
col1 col2 col3 col4 col5
row1 0 0 0 0 0
row2 -2 -2 -2 -2 -2
row3 0 0 0 0 0
row4 2 2 2 2 2
row5 0 0 0 0 0
如果列名的顺序也不同,您可以在逗号后添加一个 sort(colnames(b))
。
顺便说一句,我建议不要使用 c
作为 R
中对象的名称,因为 c
是一个 built-in 函数来创建向量。
以下示例将使用公共行和列从 a
中减去 b
。
ro <- intersect(rownames(a), rownames(b))
co <- intersect(colnames(a), colnames(b))
a[ro,co] - b[ro,co]
##> col1 col2 col3 col4 col5
##> row1 0 0 0 0 0
##> row2 -2 -2 -2 -2 -2
##> row3 0 0 0 0 0
##> row4 2 2 2 2 2
##> row5 0 0 0 0 0