2015-08-16 7 views
14

डेटा के साथ बातचीत करते समय मुझे dplyr लाइब्रेरी का चयन() फ़ंक्शन मेरे डेटा फ्रेम कॉलम को व्यवस्थित करने का एक शानदार तरीका मिल जाता है।dplyr :: चयन - नए डेटा फ्रेम (या शुरुआत या मध्य) के अंत में सभी अन्य कॉलम सहित

एक महान उपयोग, यदि मैं एक डीएफ के साथ काम कर रहा हूं जिसमें कई कॉलम हैं, तो मैं अक्सर अपने आप को तुलनात्मक रूप से तुलना करने के लिए एक दूसरे के बगल में दो चर डालता हूं। ऐसा करने पर, मुझे पहले या बाद में सभी अन्य कॉलम संलग्न करने की आवश्यकता होती है। मैंने पाया कि matches(".") ऐसा करने के लिए एक सुविधाजनक सुविधाजनक तरीका है।

उदाहरण के लिए:

library(nycflights13) 
library(dplyr) 

# just have the five columns: 
select(flights, carrier, tailnum, year, month, day) 

# new order for all column: 
select(flights, carrier, tailnum, year, month, day, matches(".")) 
# matches(".") attached all other columns to end of new data frame 

प्रश्न - मैं उत्सुक हूँ अगर वहाँ यह करने के लिए एक बेहतर तरीका है? अधिक लचीला होने की भावना में बेहतर।

एक समस्या के उदाहरण के लिए: क्या नए डेटा की शुरुआत या मध्य में "अन्य सभी" कॉलम शामिल करने का कोई तरीका है। फ्रेम? (ध्यान दें कि select(flights, matches("."), year, month, day,) वांछित परिणाम का उत्पादन नहीं करता, matches(".") के बाद से सभी स्तंभों को जुड़ा हुआ है और year, month, day अनदेखी कर रहे हैं क्योंकि वे मौजूदा कॉलम नामों में से दोहराता है।)

उत्तर

23

आप कॉलम

  • अन्य सभी स्तंभ अंत पर पुन: व्यवस्थित करना चाहते हैं:
  • select(flights, carrier, tailnum, year, month, day, everything()) 
    

    या दो चरणों में, एक में प्रदान की चर का चयन करने के चरित्र वेक्टर, one_of("x", "y", "z"):

    col <- c("carrier", "tailnum", "year", "month", "day") 
    select(flights, one_of(col), everything()) 
    

  • अन्य सभी स्तंभ शुरुआत पर:
  • select(flights, -one_of(col), one_of(col)) 
    

    आप चाहते हैं सभी डेटा फ्रेम जोड़ने फिर dplyr का उपयोग कर:

  • सभी डेटा फ्रेम अंत में:
  • bind_cols(select(flights, one_of(col)), flights) 
    

  • शुरुआत में सभी डेटा फ्रेम:
  • bind_cols(flights, select(flights, one_of(col))) 
    
    1

    नहीं हालांकि एक बहुत ही सुंदर समाधान है, यह काम करता है।

    select(flights, carrier, tailnum, 
    one_of(setdiff(colnames(flights),c("carrier","tailnum","year"))),year) 
    

    मैंने तुलना करने के लिए setdiff फ़ंक्शन का उपयोग किया। चूंकि select स्ट्रिंग तर्क स्वीकार नहीं करते हैं, मैंने one_of फ़ंक्शन का उपयोग किया है। चुनिंदा तर्क के लिए कई उपयोगिता कार्यों की सूची के लिए आप इस post का उल्लेख कर सकते हैं।

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