我有两个从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(左,右)中:' - '没有意义 因子
可能是因为t1和t2包含行和列的字符串标题(这对其余操作很重要)。
如何在不考虑每行和每列的字符串的情况下减去两个矩阵?
答案 0 :(得分:2)
省略第一列。一种方法是使用否定索引
t3 <- t1[,-1] - t2[,-1]
如果需要,您可以在第一列中合并
t3 <- cbind(t1[,1, drop=FALSE], t1[,-1] - t2[,-1])
当然,这假设您的所有行都已匹配。
答案 1 :(得分:2)
您永远不应该首先读取数据框标题行。使用read.csv(header=T...)
或read.csv(skip=1, ...)
。
或者读取t1,t2作为数据帧,然后强制转换为矩阵:
as.matrix(t1) - as.matrix(t2)