繁体   English   中英

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

[英]Find corresponding indices between two vectors in R

我有一个10 * 10的p值矩阵,如下所示:

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。 FDR与pvalue图

问题是,如何在FDR向量和pvalue向量中都获得点(例如带圆圈的点)的x和y索引。 谢谢。

您可以使用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

你的意思是这样吗?

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

在此处输入图片说明

编辑:对于您的问题“我需要一种脚本方式,例如查找与min(FDR)值相对应的所有pvalue”,这非常简单:

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

这将产生一个经过过滤的data.frame最小FDR,其中仅包含等于最小FDR的点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM