0

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

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

不起作用,它会引发:

警告消息:在 Ops.factor(left, right) 中:'-' 对因子没有意义

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

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

4

2 回答 2

2

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

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

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

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

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

于 2015-10-22T01:01:02.370 回答
2

您首先不应该阅读数据帧标题行。使用read.csv(header=T...)read.csv(skip=1, ...)

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

as.matrix(t1) - as.matrix(t2)
于 2015-10-22T01:22:28.187 回答