2012-10-24 16 views
56

मेरे पास 371 एमबी टेक्स्ट फ़ाइल है जिसमें माइक्रो आरएनए डेटा है। अनिवार्य रूप से, मैं केवल उन पंक्तियों का चयन करना चाहता हूं जिनमें मानव माइक्रोआरएनए के बारे में जानकारी है।पंक्तियों का चयन जहां कॉलम में 'hsa ..' (आंशिक स्ट्रिंग मिलान) जैसे स्ट्रिंग है

मैंने एक read.table का उपयोग कर फ़ाइल में पढ़ा है। आम तौर पर, मैं एसकल्डएफ के साथ जो चाहूं वह पूरा करूँगा - अगर उसके पास 'जैसे' वाक्यविन्यास था (< से चुनें * जहां miRNA 'hsa' जैसा है)। दुर्भाग्य से - sqldf उस वाक्यविन्यास का समर्थन नहीं करता है।

मैं आर में यह कैसे कर सकता हूं? मैंने स्टैक ओवरफ्लो के चारों ओर देखा है और का उदाहरण नहीं देख रहा हूं कि मैं आंशिक स्ट्रिंग मैच कैसे कर सकता हूं। मैंने स्ट्रिंग पैकेज भी स्थापित किया - लेकिन इसमें मुझे जो चाहिए वह काफी नहीं है।

मैं क्या करना चाहता हूं, ऐसा कुछ है - जहां सभी पंक्तियां जहां एचएसए -* चयनित हैं।

selectedRows <- conservedData[, conservedData$miRNA %like% "hsa-"] 

जो निश्चित रूप से सही वाक्यविन्यास नहीं है।

क्या कोई मेरी मदद कर सकता है? पढ़ने के लिए बहुत बहुत धन्यवाद।

एस्डा

+6

क्या आप अपने डेटा की कुछ पंक्तियां पोस्ट कर सकते हैं, अधिमानतः 'ड्यूटी (हेड (संरक्षित डेटा)) जैसे कुछ का उपयोग कर सकते हैं। – A5C1D2H2I1M1N2O1R2T1

उत्तर

89

मुझे लगता है कि आप अपने वर्तमान दृष्टिकोण में एक समारोह %like% उल्लेख नोटिस। मुझे नहीं पता कि यह "data.table" से %like% का संदर्भ है, लेकिन यदि ऐसा है, तो आप निश्चित रूप से इसका उपयोग निम्नानुसार कर सकते हैं।

ध्यान दें कि वस्तु होने की जरूरत नहीं है एक data.table (लेकिन यह भी याद रखें कि subsetting data.frame रों के लिए दृष्टिकोण और data.table रों समान नहीं हैं):

library(data.table) 
mtcars[rownames(mtcars) %like% "Merc", ] 
iris[iris$Species %like% "osa", ] 

हैं कि तुम क्या था शायद आप है, तो डेटा को सबसेट करने के लिए बस पंक्ति और कॉलम स्थितियों को मिश्रित किया था।


आप एक पैकेज लोड करने के लिए नहीं करना चाहते हैं, तो आप स्ट्रिंग आप मिलान कर रहे हैं के लिए खोज करने के लिए grep() उपयोग करने का प्रयास कर सकते हैं।

mtcars[grep("Merc", rownames(mtcars)), ] 
      mpg cyl disp hp drat wt qsec vs am gear carb 
# Merc 240D 24.4 4 146.7 62 3.69 3.19 20.0 1 0 4 2 
# Merc 230 22.8 4 140.8 95 3.92 3.15 22.9 1 0 4 2 
# Merc 280 19.2 6 167.6 123 3.92 3.44 18.3 1 0 4 4 
# Merc 280C 17.8 6 167.6 123 3.92 3.44 18.9 1 0 4 4 
# Merc 450SE 16.4 8 275.8 180 3.07 4.07 17.4 0 0 3 3 
# Merc 450SL 17.3 8 275.8 180 3.07 3.73 17.6 0 0 3 3 
# Merc 450SLC 15.2 8 275.8 180 3.07 3.78 18.0 0 0 3 3 

और, एक और उदाहरण, स्ट्रिंग osa के लिए खोज iris डेटासेट का उपयोग करके:

irisSubset <- iris[grep("osa", iris$Species), ] 
head(irisSubset) 
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species 
# 1   5.1   3.5   1.4   0.2 setosa 
# 2   4.9   3.0   1.4   0.2 setosa 
# 3   4.7   3.2   1.3   0.2 setosa 
# 4   4.6   3.1   1.5   0.2 setosa 
# 5   5.0   3.6   1.4   0.2 setosa 
# 6   5.4   3.9   1.7   0.4 setosa 
यहाँ mtcars डाटासेट, जहाँ हम सभी पंक्तियों मिलान कर रहे हैं जहां पंक्ति के नाम भी शामिल है "मर्क" के साथ एक उदाहरण है

आपकी समस्या कोशिश के लिए:

selectedRows <- conservedData[grep("hsa-", conservedData$miRNA), ] 
+0

+1: यह भी ध्यान दें कि 'grep' नियमित अभिव्यक्तियों का समर्थन करता है ताकि आप इसके बजाय '^ hsa-' के लिए grep करना चाहें। – nico

+2

@ निको: वास्तव में, 'grep' एड कमांड जी/री/पी (वैश्विक/नियमित अभिव्यक्ति/प्रिंट) से आता है, और यह केवल वास्तविक अभिव्यक्ति-मास्टर के स्वामी के लिए अपनी वास्तविक शक्ति का खुलासा करता है ;-): http: //en.wikipedia.org/wiki/Grep –

+0

**%% की तरह ** ** सुझाव बहुत अच्छा है! मैं इसे अपने उत्तर के शीर्ष पर रखने की सलाह देता हूं। –

17

LIKE SQLite में काम करना चाहिए:

require(sqldf) 
df <- data.frame(name = c('bob','robert','peter'),id=c(1,2,3)) 
sqldf("select * from df where name LIKE '%er%'") 
    name id 
1 robert 2 
2 peter 3 
+0

एसक्यूएलडीएफ लिस्टिंग के लिए सबसे अच्छा है। हालांकि, यह पंक्तियों को हटा नहीं सकता है। –

+1

एक आर पैकेज को 'आवश्यकता() ' – rgalbo

+0

के साथ क्यों लोड किया जा रहा है क्योंकि यह मानक आर लाइब्रेरी नहीं है और आपको इसे मैन्युअल रूप से इंस्टॉल करना होगा और फिर' आवश्यकता 'फ़ंक्शन का उपयोग करके लोड करना होगा। – bartektartanus

34

stringr पैकेज है, जो एक स्ट्रिंग में उपस्थिति या एक पैटर्न के अभाव का पता लगाता है से str_detect() की कोशिश करो।

library(stringr) 
library(dplyr) 

CO2 %>% 
    filter(str_detect(Treatment, "non")) 

    Plant  Type Treatment conc uptake 
1 Qn1  Quebec nonchilled 95 16.0 
2 Qn1  Quebec nonchilled 175 30.4 
3 Qn1  Quebec nonchilled 250 34.8 
4 Qn1  Quebec nonchilled 350 37.2 
5 Qn1  Quebec nonchilled 500 35.3 
... 

यह नमूना सीओ 2 डेटा सेट (कि आर के साथ आता है) पंक्तियों के लिए जहां उपचार चर-स्ट्रिंग शामिल फिल्टर:

यहाँ और इस तरीके को %>% पाइप और filter()dplyr पैकेज से शामिल किया गया है "गैर"। आप समायोजित कर सकते हैं कि str_detect निश्चित मिलान पाता है या रेगेक्स का उपयोग करता है - स्ट्रिंग पैकेज के लिए दस्तावेज़ देखें।

संबंधित मुद्दे