[英]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
向量中都获得点(例如带圆圈的点)的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]
和y
与FDR[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.