[英]Calculating correlation between columns of R data frame
我有一个大数据表,其中包含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和cor.test
和8列之间的整体相关性。我可以使用cor.test
函数手动执行此操作,例如对于第一行中的数据:
cor.test(c(480,770,601,953), c(469,750,588,944))$estimate
cor
0.9997302
但是对于我来说,我无法弄清楚如何以自动方式在数据表中执行此操作(即返回相关系数向量,每行一个)。 我可能可以进行某种for
循环,但这似乎是一个丑陋的解决方案,而不是“ R方式”。
您可以使用apply
返回行相关。 将MARGIN
设置为1
可将功能应用于每一行。 然后,您可以使用lapply
仅打印出列表的cor估计。
这里是您的代码示例:
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.