R中矩阵中的一对多相关计算
One to many correlation calculation in a matrix in R
尝试计算矩阵中特定基因(此处为基因 1)与所有其他基因(35999 个候选基因)的相关性
samp1 samp2 samp3 samp4
Gene 1 3.7891 2.4487 1.1939 0.6013
Gene 2 1.4484 3.2316 2.841 1.9545
Gene 3 0.4505 2.6062 2.0729 0.6403
.
.
Gene 36000 1.8828 5.2633 2.7552 1.7335
我使用了下面的代码
library(Hmisc)
A <- read.table("C:/Users/Desktop/exp.txt", header=T, sep="\t")
cor <- rcorr(as.matrix(A), type="pearson")
write.csv(cor$r,'C:/Users/Desktop/pCC VALUES.csv')
write.csv(cor$P,'C:/Users/Desktop/p VALUES.csv')
但是上面的代码是针对36000*36000的矩阵计算的。但是,我想获得 一对多 相关性,其中感兴趣的基因始终是第一个基因。这是它的基因 1。这将节省处理时间。一种方法显然是从输出中提取我感兴趣的 36000 对。我想知道是否有任何其他方法可以在没有 多对多 计算的情况下找到我的基因与所有其他基因的相关性。
编辑:
我正在寻找类似格式的输出,
Gene 1 Gene 2 pcc p-value
Gene 1 Gene 3 pcc p-value
.
.
Gene 1 Gene 36000 pcc p-value
end
如果我没猜错(将第一行与其他每一行相关联,一次取一个),那么沿着这些方向的一些东西可能会让你开始:
dat <- as.matrix(read.table(text = "samp1;samp2;samp3;samp4
Gene 1;3.7891;2.4487;1.1939;0.6013
Gene 2;1.4484;3.2316;2.841;1.9545
Gene 3;0.4505;2.6062;2.0729;0.6403
Gene 4;0.4705;2.4062;1.0729;0.6003
Gene 5;1.8828;5.2633;2.7552;1.7335", sep=";"))
corr_list <- list()
for (i in 2:nrow(dat)) {
r <- cor.test(dat[1,], dat[i,])
corr_list[[paste("Genes 1 &", i)]] <- c(r$estimate, p.val=r$p.value)
}
# Results
corr_list
$`Genes 1 & 2`
cor p.val
-0.3070573 0.6929427
$`Genes 1 & 3`
cor p.val
-0.1417635 0.8582365
$`Genes 1 & 4`
cor p.val
0.04777015 0.95222985
$`Genes 1 & 5`
cor p.val
0.1425788 0.8574212
如果更方便,您也可以将结果放在 data.frame 中:
corr_list <- data.frame(Gene1=numeric(), Gene2=numeric(), cor=numeric(), p.value=numeric())
for (i in 2:nrow(dat)) {
r <- cor.test(dat[1,], dat[i,])
corr_list[i-1,] <- c(1, i, r$estimate, r$p.value)
}
corr_list
Gene1 Gene2 cor p.value
1 1 2 -0.30705735 0.6929427
2 1 3 -0.14176355 0.8582365
3 1 4 0.04777015 0.9522299
4 1 5 0.14257884 0.8574212
尝试计算矩阵中特定基因(此处为基因 1)与所有其他基因(35999 个候选基因)的相关性
samp1 samp2 samp3 samp4
Gene 1 3.7891 2.4487 1.1939 0.6013
Gene 2 1.4484 3.2316 2.841 1.9545
Gene 3 0.4505 2.6062 2.0729 0.6403
.
.
Gene 36000 1.8828 5.2633 2.7552 1.7335
我使用了下面的代码
library(Hmisc)
A <- read.table("C:/Users/Desktop/exp.txt", header=T, sep="\t")
cor <- rcorr(as.matrix(A), type="pearson")
write.csv(cor$r,'C:/Users/Desktop/pCC VALUES.csv')
write.csv(cor$P,'C:/Users/Desktop/p VALUES.csv')
但是上面的代码是针对36000*36000的矩阵计算的。但是,我想获得 一对多 相关性,其中感兴趣的基因始终是第一个基因。这是它的基因 1。这将节省处理时间。一种方法显然是从输出中提取我感兴趣的 36000 对。我想知道是否有任何其他方法可以在没有 多对多 计算的情况下找到我的基因与所有其他基因的相关性。
编辑:
我正在寻找类似格式的输出,
Gene 1 Gene 2 pcc p-value
Gene 1 Gene 3 pcc p-value
.
.
Gene 1 Gene 36000 pcc p-value
end
如果我没猜错(将第一行与其他每一行相关联,一次取一个),那么沿着这些方向的一些东西可能会让你开始:
dat <- as.matrix(read.table(text = "samp1;samp2;samp3;samp4
Gene 1;3.7891;2.4487;1.1939;0.6013
Gene 2;1.4484;3.2316;2.841;1.9545
Gene 3;0.4505;2.6062;2.0729;0.6403
Gene 4;0.4705;2.4062;1.0729;0.6003
Gene 5;1.8828;5.2633;2.7552;1.7335", sep=";"))
corr_list <- list()
for (i in 2:nrow(dat)) {
r <- cor.test(dat[1,], dat[i,])
corr_list[[paste("Genes 1 &", i)]] <- c(r$estimate, p.val=r$p.value)
}
# Results
corr_list
$`Genes 1 & 2`
cor p.val
-0.3070573 0.6929427
$`Genes 1 & 3`
cor p.val
-0.1417635 0.8582365
$`Genes 1 & 4`
cor p.val
0.04777015 0.95222985
$`Genes 1 & 5`
cor p.val
0.1425788 0.8574212
如果更方便,您也可以将结果放在 data.frame 中:
corr_list <- data.frame(Gene1=numeric(), Gene2=numeric(), cor=numeric(), p.value=numeric())
for (i in 2:nrow(dat)) {
r <- cor.test(dat[1,], dat[i,])
corr_list[i-1,] <- c(1, i, r$estimate, r$p.value)
}
corr_list
Gene1 Gene2 cor p.value
1 1 2 -0.30705735 0.6929427
2 1 3 -0.14176355 0.8582365
3 1 4 0.04777015 0.9522299
4 1 5 0.14257884 0.8574212