两个矩阵相减得到绝对值

Posted

技术标签:

【中文标题】两个矩阵相减得到绝对值【英文标题】:subtracting two matrices and getting absolute value 【发布时间】:2017-12-22 16:03:13 【问题描述】:
SNP ID1 ID2 ID3 ID4
var1    0   1   1   2
var2    0   0   2   1
var3    2   1   1   0 

这里有两个矩阵,列名是 ID 1 和 ID 2,SNP 编号是 var1 var 2 等。两个矩阵都有相同的 ID 和 var。我想从矩阵二中减去矩阵一并得到绝对值。添加 ID 和 var 以匹配矩阵中的数据。

SNP ID1 ID2 ID3 ID4
var1    1   1   0   0
var2    0   1   2   0
var3    1   2   2   1

我想得到第三个矩阵

SNP ID1 ID2 ID3 ID4
var1    1   0   1   2
var2    0   1   0   1
var3    1   1   1   1

【问题讨论】:

你有matrix或者data.frame吗?看起来像data.framed3 <- d1; d3[-1] <- abs(d1[-1]-d2[-1]) 您应该使您的示例可重现,它可以帮助我们帮助您。 (但无论如何,akrun 都是解决方案) 【参考方案1】:

您想要abs(m1 - m2),其中m1m2 是您使用以下创建的矩阵

m1 <- matrix(c(0,1,1,2,
               0,0,2,1,
               2,1,1,0), ncol = 4, byrow = TRUE)

m2 <- matrix(c(1,1,0,0,
               0,1,2,0,
               1,2,2,1), ncol = 4, byrow = TRUE)

rownames(m1) <- rownames(m2) <- paste0('var', seq_len(nrow(m1)))
colnames(m1) <- colnames(m2) <- paste0('ID', seq_len(ncol(m1)))

这会产生。

> abs(m1 - m2)
     ID1 ID2 ID3 ID4
var1   1   0   1   2
var2   0   1   0   1
var3   1   1   1   1

如果它们是具有显式 SNP 列的数据框,您将要删除该列:abs(df1[, -1] - df2[, -1])

【讨论】:

以上是关于两个矩阵相减得到绝对值的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本,awk实现文件a的每行数据与文件b的相对应的行的值相减,得到其绝对值。

matlab 如何求一个矩阵所有元素的绝对值的和

FFT字符串匹配

matlab怎么求矩阵的绝对值

Scilab - 如何在具有原始符号的矩阵中获得最大绝对值?

freemarker求负数的绝对值