2017-05-21 26 views
0

2つのデータフレームがあり、範囲内で報告される変数はmzmin、mzmed、mzmax、rtmin、rtmed、rtmaxです。ビーイング:この場合重複範囲の検索

table1 <- read.csv("table1.csv") 

name  mzmed  mzmin  mzmax  rtmed rtmin rtmax 
M1   202.1110 202.110859 202.111285 50.35 49.62 51.13 
M2   373.144219 373.143792 373.154876 50.38 49.62 51.86 
M3   371.14497 371.144256 371.145224 80.34 79.62 81.41 
M4   372.147279 372.146992 372.147583 100.35 99.62 101.41 

table2 <- read.csv("table2.csv") 

name  mzmed  mzmin  mzmax  rtmed rtmin rtmax 
M1   558.109976 558.102886 558.111497 10.89 9.95 11.95 
M2   371.144564 371.144000 371.144999 80.29 79.14 81.98 
M3   498.091821 498.091632 498.092225 658.15 656.57 660.96 
M4   284.098785 284.098429 284.099092 760.32 758.67 761.2 

、表2のTABLE1とM2のM3は、私がMZ範囲がが重なっているため、新しいテーブルに書き込むことにしたいです。

M2およびM3のrt範囲が100未満の場合は、新しい表にのみ書き込むことも有益です。私はIRangesが何らかの形で最良に使用されると仮定していますが、私は肯定的ではありません。

ご意見やご提案をいただければ幸いです。

+3

を'パッケージはあなたのために働くかもしれません。 – Uwe

答えて

1

Uweブロックがコメントしたように、foverlapsが機能します。

table1 <- data.table(read.table(header = T, 
        text = "name  mzmed  mzmin  mzmax  rtmed rtmin rtmax 
M1   202.1110 202.110859 202.111285 50.35 49.62 51.13 
        M2   373.144219 373.143792 373.154876 50.38 49.62 51.86 
        M3   371.14497 371.144256 371.145224 80.34 79.62 81.41 
        M4   372.147279 372.146992 372.147583 100.35 99.62 101.41 
")) 

table2 <- data.table(read.table(header = T, 
        text = "name  mzmed  mzmin  mzmax  rtmed rtmin rtmax 
M1   558.109976 558.102886 558.111497 10.89 9.95 11.95 
M2   371.144564 371.144000 371.144999 80.29 79.14 81.98 
M3   498.091821 498.091632 498.092225 658.15 656.57 660.96 
M4   284.098785 284.098429 284.099092 760.32 758.67 761.2 
")) 

setkey(table2, mzmin, mzmax) 
out <- foverlaps(table1, table2, type="any",nomatch=0L) 

> out 
    name mzmed mzmin mzmax rtmed rtmin rtmax i.name i.mzmed i.mzmin i.mzmax i.rtmed i.rtmin i.rtmax 
1: M2 371.1446 371.144 371.145 80.29 79.14 81.98  M3 371.145 371.1443 371.1452 80.34 79.62 81.41 

あなたはMZの範囲は、室温の範囲の100以内になりたいなら、あなたは、次のコードを使用することができます `data.tableから` foverlaps() `、おそらく

out[abs(mzmin-rtmax)<100 | abs(rtmin-mzmax)<100,] 
Empty data.table (0 rows) of 14 cols: name,mzmed,mzmin,mzmax,rtmed,rtmin...