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

时间:2014-10-23 15:41:35

标签: r loops dataframe correlation

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

这是我正在做的事情:

我首先创建了一个空数据框

m <- as.data.frame(matrix(0, ncol = 350, nrow = 2000))

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

现在我正在计算彼此的比率,并将值填入空数据框

for (i in 1:nrow(control.mRNA)) {
  for (j in 1:nrow(control.miRNA)) {
    m[i,j] <- control.miRNA[j]/control.mRNA[i]
  }
}

但这不起作用。 对于乘法,有函数&#34; crossprod&#34;但是我没有找到任何分裂的东西。

1 个答案:

答案 0 :(得分:1)

您可以使用outer。这是一个简单的(istic)e例子:

u <- 1:5
v <- c(3,7)

outer(u, v, "/")

结果是一个矩阵,其中5行(u)行中的系数为#2,v中的系数为u[i] / v[j]列,行{{1}中的系数为i和col j。要在行u[j] / v[i]和列i中设置j,您可以使用转置运算符t

M1 <- t(outer(u, v, "/"))
@shadow明智地指出outer将向量作为参数,而不是矩阵。这可以通过首先将矩阵转换为向量来轻松处理。

我们采用与以前相同的示例,但使用UV两个矩阵而不仅仅是向量:

U <- matrix(1:5)
V <- matrix(c(3,7))
M2 <- t( outer(drop(U), drop(V), "/") )

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

M3 <- t( U %*% t(1/V) )