2015-10-22 3 views
8

अक्सर मैं वेरिएबल का सबसेट चुनना चाहता हूं जहां सबसेट फ़ंक्शन का परिणाम होता है।dplyr के चयन का उपयोग करें जहां वेरिएबल नाम उद्धृत किए गए हैं

>width.vars 
[1] "Sepal.Width" "Petal.Width" 

यह चयन करने के लिए एक तरह से के रूप में इन रिटर्न उपयोग करने के लिए सक्षम होने के लिए उपयोगी होगा: इस सरल मामले में, मैं पहली बार सभी चर नाम जो चौड़ाई विशेषताओं

library(dplyr) 
library(magrittr) 

data(iris) 

width.vars <- iris %>% 
       names %>% 
       extract(grep(".Width", .)) 

कौन सा रिटर्न से संबंधित प्राप्त कॉलम (और मुझे पता है कि और इसके भाई बहन मौजूद हैं, वहां बहुत अधिक जटिल सबसेट हैं जो मैं करना चाहता हूं, और इस उदाहरण के उद्देश्य के लिए यह उदाहरण छोटा हो गया है।

यदि मैं प्रयास करना चाहता था इस समारोह को aw के रूप में उपयोग करने के लिए ay स्तंभों का चयन करने के लिए, निम्न होता है:

iris %>% 
    select(Species, 
     width.vars) 

Error: All select() inputs must resolve to integer column positions. 
The following do not: 
* width.vars 

मैं कैसे उपयोग कर सकते हैं dplyr::select तार के रूप में जमा चर नाम का एक वेक्टर के साथ?

उत्तर

17

dplyr के भीतर, अधिकांश आदेशों में एक वैकल्पिक संस्करण होता है जो '_' के साथ समाप्त होता है जो स्ट्रिंग को इनपुट के रूप में स्वीकार करता है; इस मामले में, select_। ये आमतौर पर उपयोग करते हैं जब आप dplyr प्रोग्रामेटिक रूप से उपयोग कर रहे हैं।

iris %>% select_(.dots=c("Species",width.vars)) 
5

सबसे पहले, आप अलग से नामों में से वेक्टर बनाने की आवश्यकता

iris %>% select(Species, contains(".Width")) 

साथ dplyr में चयन कर सकते हैं। लेकिन अगर आप स्ट्रिंग नामों के रूप में कॉलम की एक सूची थी, है न

width.vars <- c("Sepal.Width", "Petal.Width") 
iris %>% select(Species, one_of(width.vars)) 

सभी उपलब्ध विकल्पों के लिए ?select मदद पृष्ठ देखें सकता है।

+1

अपने जवाब के लिए धन्यवाद, लेकिन जैसा कि मैंने सवाल में कहा, मैं 'select' के बारे में पता कर रहा हूँ, और मैं उन मामलों में दिलचस्पी रखता हूँ जहाँ मैं चर का एक सेट करने के लिए एक और अधिक जटिल समारोह करना चाहता था नाम। – tomw

+2

तो यह वही है जो ऊपर दिखाए गए अनुसार 'one_of' करेगा। – MrFlick

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