2015-09-16 11 views
16

dplyr उपयोग करके, आप कुछ इस तरह कर सकते हैं:dplyr: म्यूटेट का उपयोग करके कॉलम नाम के बजाय कॉलम इंडेक्स द्वारा कॉलम का संदर्भ कैसे लें?

iris %>% head %>% mutate(sum=Sepal.Length + Sepal.Width) 
    Sepal.Length Sepal.Width Petal.Length Petal.Width Species sum 
1   5.1   3.5   1.4   0.2 setosa 8.6 
2   4.9   3.0   1.4   0.2 setosa 7.9 
3   4.7   3.2   1.3   0.2 setosa 7.9 
4   4.6   3.1   1.5   0.2 setosa 7.7 
5   5.0   3.6   1.4   0.2 setosa 8.6 
6   5.4   3.9   1.7   0.4 setosa 9.3 

लेकिन इसके बाद के संस्करण, मैं उनकी स्तंभ नाम से कॉलम संदर्भित किया है। मैं 1 और 2 का उपयोग कैसे कर सकता हूं, जो एक ही परिणाम प्राप्त करने के लिए कॉलम इंडेक्स हैं?

यहां मेरे पास निम्न है, लेकिन मुझे लगता है कि यह सुरुचिपूर्ण नहीं है।

iris %>% head %>% mutate(sum=apply(select(.,1,2),1,sum)) 
    Sepal.Length Sepal.Width Petal.Length Petal.Width Species sum 
1   5.1   3.5   1.4   0.2 setosa 8.6 
2   4.9   3.0   1.4   0.2 setosa 7.9 
3   4.7   3.2   1.3   0.2 setosa 7.9 
4   4.6   3.1   1.5   0.2 setosa 7.7 
5   5.0   3.6   1.4   0.2 setosa 8.6 
6   5.4   3.9   1.7   0.4 setosa 9.3 

उत्तर

26

आप कोशिश कर सकते हैं:

iris %>% head %>% mutate(sum = .[[1]] + .[[2]]) 

    Sepal.Length Sepal.Width Petal.Length Petal.Width Species sum 
1   5.1   3.5   1.4   0.2 setosa 8.6 
2   4.9   3.0   1.4   0.2 setosa 7.9 
3   4.7   3.2   1.3   0.2 setosa 7.9 
4   4.6   3.1   1.5   0.2 setosa 7.7 
5   5.0   3.6   1.4   0.2 setosa 8.6 
6   5.4   3.9   1.7   0.4 setosa 9.3 
+5

नोट यह अच्छी तरह से 'group_by' के साथ गठबंधन नहीं करेगा:। आईरिस%>% group_by (प्रजाति)%>% उत्परिवर्तित (राशि' = [[1] ] +। [[2]]) '' आईरिस%>% group_by (प्रजातियां)%>% उत्परिवर्तन (योग = सेपल। लम्बाई + Sepal.Width) 'करता है। – MrFlick

+1

@MrFlick - शायद मुझे कुछ याद आ रहा है। जब आप पंक्ति-वार की गणना कर रहे हों तो समूह को क्यों समूहीकृत करना होगा? वे शायद वहां 'ungroup() 'फेंक सकते हैं, फिर यदि वे अन्य परिचालन कर रहे हैं तो फिर से समूह करें। मैंने पहले यह पाया है। –

+4

@ रिचर्डस्क्रिवन यह एक चेतावनी है कि यह विधि वास्तव में बहुत अधिक बुनियादी ढांचे को पार कर रही है, इसलिए यह समूहबद्ध जैसी चीजों को तोड़ सकती है जो अन्यथा काम करनी चाहिए। आप अनिवार्य रूप से mutate के 'data =' पैरामीटर पर छोड़ रहे हैं। आप सही हैं कि यह पंक्ति-वार 'mutate() 'के लिए वास्तव में कोई फर्क नहीं पड़ता है, लेकिन विचार करें:' आईरिस%>% group_by (प्रजातियां)%>% संक्षेप (x = mean (। [[1]] +। [[2]])) 'यह इंडेक्स द्वारा कॉलम निर्दिष्ट करने के लिए एक अच्छी "सामान्य" विधि नहीं है। – MrFlick

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