在 R 中找到两个向量之间的对应索引

Find corresponding indices between two vectors in R

我有一个 10*10 p-value 矩阵:

pvalue<- structure(c(NA, -0.096323162317276, 0.122216485440731, 0.096323162317276, 
0.225789770483971, 0.161574333906174, -0.0300362538546324, -0.096323162317276, 
0.161574333906174, -0.160538598895073, NA, NA, -0.127395153045654, 
-0.167788729071617, 0.253754556179047, -0.108751960098743, -0.428793430328369, 
0.167788729071617, -0.108751960098743, -0.393578499555588, NA, 
NA, NA, -0.0911444947123528, -0.214396715164185, -0.15432420372963, 
0.0248575899749994, 0.0911444947123528, -0.15432420372963, 0.151217013597488, 
NA, NA, NA, NA, 0.25789749622345, -0.15432420372963, -0.497151792049408, 
0.211289510130882, -0.15432420372963, -0.424650490283966, NA, 
NA, NA, NA, NA, -0.15432420372963, 0.0248575899749994, 0.0911444947123528, 
-0.15432420372963, 0.151217013597488, NA, NA, NA, NA, NA, NA, 
0.0300362538546324, 0.096323162317276, -0.161574333906174, 0.160538598895073, 
NA, NA, NA, NA, NA, NA, NA, 0.304505467414856, -0.262040436267853, 
-0.397721439599991, NA, NA, NA, NA, NA, NA, NA, NA, 0.349041998386383, 
0.319005727767944, NA, NA, NA, NA, NA, NA, NA, NA, NA, -0.160538598895073, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), .Dim = c(10L, 10L))

然后我调整了它们:

FDR<- p.adjust(as.numeric(pvalue), method="BH", n=45)
qplot(-log(as.numeric(pvalue), 2), FDR, ylim=c(-0.1, 0.5))

产生了以下情节。每个 FDR 值都有对应的 pvalue。

问题是如何在 FDRpvalue 向量的两个向量中实现点(例如带圆圈的点)的 x 和 y 索引。谢谢。

你的意思是这样的吗?

dataTemp   <- data.frame(FDR)
dataTemp$x <- -log(as.numeric(pvalue), 2)

require(ggplot2)

g <- ggplot(dataTemp,aes(x=x,y=FDR))
g <- g + geom_point()
g <- g + geom_text(aes(x=x,y=FDR,label=paste(round(x,2),round(FDR,2))),size=4)
g <- g + ylim(-0.1,0.5)
g

编辑:关于 "I need a script way to for example find all pvalues that correspond to min(FDR) values" 的问题非常简单:

min.FDRs <- dataTemp[dataTemp$FDR == min(dataTemp$FDR),]

这会产生过滤后的 data.frame min.FDRs,其中仅包含等于最小 FDR 的点。

您可以使用locator函数:

绘制数据后,输入:

locator(1) # to know the coordinates of only one point, locator(k) for k points

然后用鼠标点击该点,就可以在R控制台看到坐标了。

对于你的红色圆圈点,它给出:

> locator(1)
$x
[1] 3.460083

$y
[1] 0.1408836

当然也可以在变量中赋值:

mypoint<-locator(1)

更新:

要获取实际坐标,可以使用identify函数:

rk_elt<-identify(-log(as.numeric(pvalue), 2),FDR,1:length(FDR),plot=F)

然后点击该点,停止identify功能。

返回控制台,您将获得 x(-log(as.numeric(pvalue), 2))[rk_elt] 以及 yFDR[rk_elt]

对于红圈点,给出:

> (-log(as.numeric(pvalue), 2))[rk_elt]
[1] 3.375973
> FDR[rk_elt]
[1] 0.1398239