用R中的字符串标题行减去两个大小相同的矩阵

时间:2015-10-22 00:48:42

标签: r matrix dataframe read.csv

我有两个从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包含行和列的字符串标题(这对其余操作很重要)。

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

2 个答案:

答案 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)