在 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)
我有两个从 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)