2015-03-12 17 views
18

मैं एक regex अभिव्यक्ति के साथ उनके नाम के आधार पर एकाधिक स्तंभों का चयन करना चाहते। मैं dplyr पैकेज के पाइपिंग सिंटैक्स के साथ ऐसा करने की कोशिश कर रहा हूं। मैंने अन्य विषयों की जांच की, लेकिन केवल एक स्ट्रिंग के बारे में जवाब मिल गए।चयन कॉलम कई तार के आधार पर dplyr साथ शामिल()

आधार आर के साथ

:

mtcars %>% select(contains('m|ar')) 
### data frame with 0 columns and 32 rows 

क्या गलत है:

library(dplyr)  
mtcars[grepl('m|ar', names(mtcars))] 
###      mpg am gear carb 
### Mazda RX4   21.0 1 4 4 
### Mazda RX4 Wag  21.0 1 4 4 

हालांकि यह चयन/साथ काम नहीं करता जिस तरह से होता है?

उत्तर

34

आप matches

mtcars %>% 
     select(matches('m|ar')) %>% 
     head(2) 
#    mpg am gear carb 
#Mazda RX4  21 1 4 4 
#Mazda RX4 Wag 21 1 4 4 

उपयोग कर सकते हैं ?select प्रलेखन

'मैचों (एक्स, ignore.case = TRUE)' के अनुसार: सभी चर जिसका नाम रेगुलर एक्सप्रेशन 'से मेल खाता है का चयन करता है एक्स '

हालांकि contains एक एकल स्ट्राइक के साथ काम करता है एनजी

mtcars %>% 
     select(contains('m')) 
+0

धन्यवाद @akrun, मुझे अब बेवकूफ लगता है :-)। लेकिन एक प्रश्न, अभी भी: दिया गया है, हम क्यों() का उपयोग करना चाहिए, अगर मैचों() समान और बेहतर भी करता है? – agenis

+0

@agenis वहाँ 'में कई विकल्प? उपयोग की लचीलेपन के लिए select' कर रहे हैं, मुझे लगता है कि। 'युक्त' एक स्ट्रिंग लेते हैं, लेकिन जब आप यह रेगेक्स प्रकार मिलान करते हैं, तो 'मैचों' का उपयोग करना बेहतर होता है ... – akrun

+1

@agenis क्योंकि आप मिलान करना चाहते हैं "। और नियमित अभिव्यक्ति में इसे कैसे बचाना है, इस बारे में सोचना नहीं है – hadley

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