首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建包含两个数据的成对比的矩阵?

如何创建包含两个数据的成对比的矩阵?
EN

Stack Overflow用户
提问于 2014-10-23 15:41:35
回答 1查看 1.2K关注 0票数 1

我有两个数据帧,一个包含基因的表达值(n=2000),另一个包含microRNA (n=350)的表达值。我要计算每个microRNA与每个基因的比率,然后将其可视化。

以下是我正在做的事情:

我首先创建了一个空的数据帧。

代码语言:javascript
复制
m <- as.data.frame(matrix(0, ncol = 350, nrow = 2000))

这三个数据帧是m,(2000,350) control.mRNA (2000,1)和control.miRNA (350,1).

现在我正在计算它们之间的比率,并将值填充到空的dataframe中。

代码语言:javascript
复制
for (i in 1:nrow(control.mRNA)) {
  for (j in 1:nrow(control.miRNA)) {
    m[i,j] <- control.miRNA[j]/control.mRNA[i]
  }
}

但这不管用。对于乘法,有函数“交叉”,但我没有找到任何除法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-23 15:51:57

你可以用outer。下面是一个simpl( is )e示例:

代码语言:javascript
复制
u <- 1:5
v <- c(3,7)

outer(u, v, "/")

结果是一个矩阵,其中5列(u中的coefs #),2列(v中的coefs )列,系数为u[i] / v[j],行i和col j。为了使u[j] / v[i]位于行i和col j中,您可以使用t (换位操作符):

代码语言:javascript
复制
M1 <- t(outer(u, v, "/"))

@影子明智地指出,outer将向量作为参数,而不是矩阵。这可以通过首先将矩阵转换为向量来轻松地处理。

让我们以前面相同的例子为例,但是对于UV两个矩阵,而不仅仅是向量:

代码语言:javascript
复制
U <- matrix(1:5)
V <- matrix(c(3,7))
M2 <- t( outer(drop(U), drop(V), "/") )

另一种解决方案是稍微转换UV,并使用矩阵乘法运算符%*%

代码语言:javascript
复制
M3 <- t( U %*% t(1/V) )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26531930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档