基于多列隔离数据区域

mfk*_*534 3 r subset intervals

我有一个数据集,缩写在这里:

SNP chr       BP log10   PPA
rs10068  17 56555 1.16303 0.030
rs10032  17 56561 26.364 0.975
rs10354  17 34951 4.3212 0.626
rs10043  17 20491 0.00097 0.006
rs10457  17 69572 -0.38403 0.014
rs10465  17 69872 8.19547 0.927
Run Code Online (Sandbox Code Playgroud)

其中PPA是后关联概率.由于我有一些较高的log10值(> 6),我想确定这些区域周围的可靠间隔,以确定它们的确有多大或多小.

为此,我首先想要识别log10> 6的SNP,使用子集这很简单.

newdata <- subset(data, log10 > 6)
Run Code Online (Sandbox Code Playgroud)

然而,我还想在这个子集中包括物理上靠近这些先导SNP的SNP,使用BP 500 +/-前导SNP的BP(log10> 6).在这里,我不确定最好的方法.这是我可以解决的问题,subset还是我应该首先在原始数据中识别这些主要SNP,然后从那里进行分组?

一旦我隔离了这些区域,我就能继续前进.

任何建议表示赞赏!

Mat*_*erg 6

s <- read.table(header=T, text="SNP chr       BP log10   PPA
rs10068  17 56555 1.16303 0.030
rs10032  17 56561 26.364 0.975
rs10354  17 34951 4.3212 0.626
rs10043  17 20491 0.00097 0.006
rs10457  17 69572 -0.38403 0.014
rs10465  17 69872 8.19547 0.927")
Run Code Online (Sandbox Code Playgroud)

到s $ log10> 6的任何行的距离:

outer(s$BP[s$log10 > 6], s$BP, '-')
##       [,1]  [,2]  [,3]  [,4]   [,5]   [,6]
## [1,]     6     0 21610 36070 -13011 -13311
## [2,] 13317 13311 34921 49381    300      0
Run Code Online (Sandbox Code Playgroud)

上面任何绝对值<500的列都是您要保留的列:

s[apply(outer(s$BP[s$log10 > 6], s$BP, '-'), 2, function(x) any(abs(x) < 500)),]
##       SNP chr    BP    log10   PPA
## 1 rs10068  17 56555  1.16303 0.030
## 2 rs10032  17 56561 26.36400 0.975
## 5 rs10457  17 69572 -0.38403 0.014
## 6 rs10465  17 69872  8.19547 0.927
Run Code Online (Sandbox Code Playgroud)