मेरे पास दो फाइलें हैं:
1) ए
code chr position score
code123947 10 13417 0.9221900
code456747 10 717559 1.0000000
code523452 10 1554421 0.5315330
code223534 10 2354490 0.0479356
code654321 10 4461920 0.9144420
code345635 10 5564649 0.7069120
code214234 10 115746 0.7191680
code654332 10 133160 0.4205290
code263562 10 135203 0.7178790
code987654 10 230894 0.5351590
2) बी
chr start stop
10 60523 751339
10 751339 1523544
10 1523544 2254500
10 2254500 3352699
10 3352699 4572274
10 4572274 5983762
10 5983762 7171484
10 7171484 8774665
10 8774665 10249396
मुझे फ़ाइल "ए" को केवल उन पंक्तियों के लिए सब्मिट करने की आवश्यकता है, जिसमें "chr" से मेल खाने के लिए "स्थिति" फ़ाइल "बी" के "स्टार्ट" - "स्टॉप" के भीतर आती है।
मैंने निम्नलिखित कोशिश की है:
awk 'NR==FNR{ range[$1,$2,$3]; next }
FNR==1
{
for(x in range) {
split(x, check, SUBSEP);
if($2==check[1] && $3>=check[2] && $3<=check[3]) print $0
}}
' b a
लेकिन यह सिर्फ एक अपरिवर्तित "ए" देता है
मैंने आर में इससे निपटने की भी कोशिश की है:
a[a$V2 == b$chr && a$V3 >= b$start && a$V3 <= b$stop, ]
जो मुझे पता है वह बेकार है क्योंकि यह कॉलम की साथ-साथ तुलना करता है। यह मुझे यह बताते हुए एक त्रुटि फेंकता है कि "लंबी वस्तु की लंबाई छोटी वस्तु की लंबाई का गुणक नहीं है"।
मैंने डेटा में "फोवरलैप्स" का उपयोग करने का भी प्रयास किया। कुंजी के रूप में "बी" कॉलम के साथ टेबल
दुर्भाग्य से, यह अभी मेरे पास सबसे अच्छा है।
कोई सुझाव? मैं जिस आउटपुट की तलाश कर रहा हूं वह है:
code chr position score
code456747 10 717559 1.0000000
code523452 10 1554421 0.5315330
code223534 10 2354490 0.0479356
code654321 10 4461920 0.9144420
code345635 10 5564649 0.7069120
धन्यवाद!!!
2 जवाब
x <- merge(a, b, by = 'chr')
x <- x[x$V3 >= x$start && x$V3 <= x$stop, ]
आप दो डेटाफ़्रेम को एक साथ मर्ज कर सकते हैं और फिर पहले की तरह फ़िल्टर कर सकते हैं।
इसी तरह join
असिस्टेड awk
के साथ
$ join -12 -21 a b | awk '$5<=$3 && $3<=$6{print $2,$1,$3,$4}'
code456747 10 717559 1.0000000
code523452 10 1554421 0.5315330
code223534 10 2354490 0.0479356
code654321 10 4461920 0.9144420
code345635 10 5564649 0.7069120
code214234 10 115746 0.7191680
code654332 10 133160 0.4205290
code263562 10 135203 0.7178790
code987654 10 230894 0.5351590
पुनश्च. फ़ाइलों को कुंजी फ़ील्ड पर सॉर्ट करने की आवश्यकता है