【问题标题】:Calculating correlation between columns of R data frame计算R数据框列之间的相关性
【发布时间】:2017-07-18 16:25:35
【问题描述】:

我有一个包含 2 组 4 对观察值的大型数据表,其中前几行如下:

   a1  a2  a3  a4  b1  b2  b3  b4
1 480 770 601 953 469 750 588 944
2   0   0   0   0   0   0   0   0
3   3  13   9  12   3  12   9  12
4   0   2   4   3   0  14   3   2
5   0   0  11   0   0   0  11   0
6 165 292 162 313 180 368 116 368

这些是来自两个不同 RNA-seq 分析管道“a”和“b”的基因表达计数:a1 和 b1 列是通过两个不同管道分析相同样本 (1) 的结果,与 a2 和b2 等。每一行 (1-6) 是一个不同的基因。我想找出是否有特定基因表现出特别差的成对相关性,即第 1 列和第 5 列、第 2 列和第 6 列、第 3 列和第 7 列、第 4 列和第 8 列之间的总体相关性。我可以使用 cor.test 函数手动执行此操作,例如对于第一行的数据:

cor.test(c(480,770,601,953), c(469,750,588,944))$estimate
      cor 
0.9997302

但在我的一生中,我无法弄清楚如何在数据表中以自动方式执行此操作(即返回一个相关系数向量,每行一个)。我可能会做某种for 循环,但这似乎是一个丑陋的解决方案,而不是“R 方式”。

【问题讨论】:

  • C. Murtaugh,如果我的回答解决了您的问题,请随时勾选它,以便将其标记为已解决。 :-)

标签: r


【解决方案1】:

您可以使用apply 返回逐行关联。 将 MARGIN 设置为 1 以将您的函数应用于每一行。 然后您可以使用lapply 仅打印出列表的正确估计值。

这里是你的代码示例:

l <- apply(X = df, MARGIN = 1, FUN = function(x) cor.test(x[1:4], x[5:8]))
lapply(X = l, FUN = function(x) x$estimate)

要在列之间进行关联,请将 MARGIN 设置为 2,并将子集更改为要比较的列。

l <- apply(X = df, MARGIN = 2, FUN = function(x) cor.test(x[2], x[6]))
    lapply(X = l, FUN = function(x) x$estimate)

【讨论】:

  • 谢谢 - 这正是医生所要求的。我总是忘记用apply 调用我自己的函数。事实上,我让它变得更简单了:cor = apply(df, MARGIN = 1, FUN = function(x) return(cor.test(x[1:4], x[5:8])$estimate))
猜你喜欢
  • 2019-10-15
  • 2021-07-04
  • 2014-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多