2017-08-29 8 views
6

इस सरल उदाहरण पर विचार करें:mutate_at के साथ नए चर बनाएं मूल लोगों को रखते हुए

library(dplyr) 

dataframe <- data_frame(helloo = c(1,2,3,4,5,6), 
         ooooHH = c(1,1,1,2,2,2), 
         ahaaa = c(200,400,120,300,100,100)) 

# A tibble: 6 x 3 
    helloo ooooHH ahaaa 
    <dbl> <dbl> <dbl> 
1  1  1 200 
2  2  1 400 
3  3  1 120 
4  4  2 300 
5  5  2 100 
6  6  2 100 

यहाँ मैं सभी स्तंभों कि oo शामिल करने के लिए समारोह ntile लागू करना चाहते हैं, लेकिन मैं ये नए कॉलम होना चाहते हैं cat + संबंधित कॉलम कहा जाता है।

मैं जानता हूँ कि मैं इस

dataframe %>% mutate_at(vars(contains('oo')), .funs = funs(ntile(., 2))) 
# A tibble: 6 x 3 
    helloo ooooHH ahaaa 
    <int> <int> <dbl> 
1  1  1 200 
2  1  1 400 
3  1  1 120 
4  2  2 300 
5  2  2 100 
6  2  2 100 

लेकिन क्या मैं जरूरत है क्या कर सकते हैं इस

# A tibble: 8 x 5 
    helloo ooooHH ahaaa cat_helloo cat_ooooHH 
    <dbl> <dbl> <dbl> <int> <int> 
1  1  1 200  1  1 
2  2  1 400  1  1 
3  3  1 120  1  1 
4  4  2 300  2  2 
5  5  2 100  2  2 
6  5  2 100  2  2 
7  6  2 100  2  2 
8  6  2 100  2  2 

वहाँ एक समाधान है कि मध्यवर्ती डाटा स्टोर करने की आवश्यकता नहीं है, और मूल करने के लिए वापस मर्ज है डेटा ढांचा?

उत्तर

13

आप प्रत्यय संलग्न नामों के साथ नए चर बनाने के लिए funs में कार्यों को नाम दे सकते हैं।

dataframe %>% mutate_at(vars(contains('oo')), .funs = funs(cat = ntile(., 2))) 

# A tibble: 6 x 5 
    helloo ooooHH ahaaa helloo_cat ooooHH_cat 
    <dbl> <dbl> <dbl>  <int>  <int> 
1  1  1 200   1   1 
2  2  1 400   1   1 
3  3  1 120   1   1 
4  4  2 300   2   2 
5  5  2 100   2   2 
6  6  2 100   2   2 

आप के बजाय एक उपसर्ग के रूप में यह चाहते हैं, आप तो rename_at का उपयोग नाम बदलने के लिए कर सकते हैं।

dataframe %>% 
    mutate_at(vars(contains('oo')), .funs = funs(cat = ntile(., 2))) %>% 
    rename_at(vars(contains("_cat")), funs(paste("cat", gsub("_cat", "", .), sep = "_"))) 

# A tibble: 6 x 5 
    helloo ooooHH ahaaa cat_helloo cat_ooooHH 
    <dbl> <dbl> <dbl>  <int>  <int> 
1  1  1 200   1   1 
2  2  1 400   1   1 
3  3  1 120   1   1 
4  4  2 300   2   2 
5  5  2 100   2   2 
6  6  2 100   2   2 
+1

मुझे लगता है कि कोई हमेशा 'col_cat' चर के नाम को बदलने के लिए कुछ रेगेक्स सामान लिख सकता है? –

+0

@ ℕʘʘḆḽḘ हाँ। संभवतः सुविधा के लिए 'rename_at' में; संपादन में जोड़ा गया उदाहरण। – aosmith

+0

नामांकन केवल तभी दिखता है जब एक से अधिक कॉलम होते हैं जिसमें एक मैच होता है। क्या यह एक भी मैच के लिए भी संलग्न करने का कोई तरीका है? उदाहरण: 'डेटाफ्रेम%>% mutate_at (vars (include ('ah')), .funs = funs (cat = ntile (।, 2))) – bheavner

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