2017-12-30 118 views
5

मैं NAMES <- names(d) जैसे अन्य ऑब्जेक्ट्स को संदर्भित किए बिना एक ही पाइप श्रृंखला में उपनामों और उनके मानों का उपयोग करके कोल्स का चयन करना चाहता हूं। क्या मैं इसे select_if() के साथ कर सकता हूं?dplyr :: select_if एक ही समय में उपनाम और उनके मूल्यों का उपयोग कर सकता है?

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

मैं कॉलम का चयन करने के colnames उपयोग कर सकते हैं।
(select(matches(...)) केवल कॉलनामों का बेहतर इलाज कर रहा है)।

library(dplyr) 
d <- iris %>% select(-Species) %>% tibble::as.tibble() 

d %>% select_if(stringr::str_detect(names(.), "Petal")) 

और मैं मानों का उपयोग कर सकता हूं।

d %>% select_if(~ mean(.) > 5) 

लेकिन यह कैसे उन दोनों को उपयोग करने के लिए? (विशेष रूप से OR)
कोड के नीचे जो मैं चाहता हूं (बेशक, दौड़ें नहीं)।

d %>% select_if(stringr::str_detect(names(.), "Petal") | ~ mean(.) > 5) 

किसी भी मदद की सराहना की जाएगी।

उत्तर

6

का संभावित हल संभव है कि बहुत जटिल नहीं है:

d %>% select_if(stringr::str_detect(names(.), "Petal") | sapply(., mean) > 5) 

# or 
d %>% select_if(grepl("Petal",names(.)) | sapply(., mean) > 5) 

कौन देता है:

# A tibble: 150 x 3 
    Sepal.Length Petal.Length Petal.Width 
      <dbl>  <dbl>  <dbl> 
1   5.1   1.4   0.2 
2   4.9   1.4   0.2 
3   4.7   1.3   0.2 
4   4.6   1.5   0.2 
5   5.0   1.4   0.2 
6   5.4   1.7   0.4 
7   4.6   1.4   0.3 
8   5.0   1.5   0.2 
9   4.4   1.4   0.2 
10   4.9   1.5   0.1 
# ... with 140 more rows 
+0

अपने जवाब के लिए धन्यवाद! मैं लैम्ब्डा कार्यों के लिए strugging था, लेकिन यह आवश्यक नहीं है। – cuttlefish44

+1

@ कटलफिश 44, निश्चित रूप से। कार्यों की समस्या यह है कि '.predicate' में कार्य कॉलम पर लागू होता है और इस तरह से हम नामों की जानकारी खो देते हैं। – mt1022

+2

एक और विकल्प 'd%>% चयन (मिलान (" पेटल "), नाम (जो (नक्शा (।, माध्य)> 5))) – akrun

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