在 R 中用字符串 header 行减去两个 same-sized 矩阵

Subtract two same-sized matrices with string header rows in R

我有两个从 csv 文件导入的矩阵。它们具有相同的行数和列数。我需要第三个矩阵,它是两个矩阵的 element-wise 减法。

t1 <- read.csv("/matrix_1.csv", check.names = FALSE, sep = ",")
t2 <- read.csv("/matrix_2.csv", check.names = FALSE, sep = ",")

t1 看起来像这样:

Name,A,B,C,D,E
A,10,5,14,3,0
B,5,21,6,1,0
C,14,6,19,6,4
D,3,1,6,7,1
E,0,0,4,1,3

和 t2 是这样的:

Name,A,B,C,D,E
A,4,5,4,3,0
B,5,2,6,1,0
C,1,6,1,6,4
D,3,1,1,7,1
E,0,0,3,1,2

正在尝试:

t3 = t1 - t2

不起作用,它引发:

Warning message: In Ops.factor(left, right) : ‘-’ not meaningful for factors

可能是因为 t1 和 t2 包含行和列的字符串 headers(这对其余操作很重要)。

如何在不考虑每行和每列的字符串的情况下减去两个矩阵?

只需省略第一列。一种方法是使用负索引

t3 <- t1[,-1] - t2[,-1]

如果需要,您可以合并回第一列

t3 <- cbind(t1[,1, drop=FALSE], t1[,-1] - t2[,-1])

当然,这假设您的所有行都已经匹配。

您一开始就不应该阅读数据框 header 行。使用 read.csv(header=T...)read.csv(skip=1, ...).

否则将 t1,t2 作为数据帧读入,然后强制转换为矩阵:

as.matrix(t1) - as.matrix(t2)