2016-09-14 30 views
5

को कैसे प्रबंधित करें मेरे पास डेटाफ्रेम है, जो एक ही मिनट के लिए 2 समूह लौटाता है। मेरे अपेक्षित आउटपुट तक पहुंचने के लिए इसे कैसे संभाला जा सकता है?dplyr: एकाधिक मान

df<- read.table(header=TRUE, 
       text=" 
       Company xxx yyyy zzzz cnt 
       abc  1  1 1  20 
       aaa  1  1 2  3 
       bbb  1  1 1  3 
       ddd  2  0 2  100 
       ") 

मैं नीचे दिए गए कोड की कोशिश की

final= df %>% 
     group_by(xxx,yyyy) %>% 
     summarise(Topcomp=Company[c(which(min(cnt)==cnt))]) 

इम हो रही:

Error: expecting a single value

मैं नीचे की तरह उत्पादन करना चाहते हैं।

xxx yyyy Topcomp 
    <int> <int> <fctr> 
1  1  1 aaa,bbb 
2  2  0  ddd 
+0

सबसे लचीला समाधान एक सूची स्तंभ है , यानी 'डीएफ%>% group_by (xxx, yyyy)%>% सारांश (टॉपकंप = सूची (कंपनी [सीएनटी == मिनट (सीएनटी)])), हालांकि, वे काम करने के लिए थोड़ा अभ्यास करते हैं। – alistaire

+0

इसके अलावा, आप नीचे 'सी' और' जो 'नीचे टिप्पणी कर सकते हैं, क्योंकि वे यहां कुछ भी नहीं कर रहे हैं। – alistaire

उत्तर

5

आप इस्तेमाल कर सकते हैं paste(..., collapse = ",")

df %>% 
    group_by(xxx,yyyy) %>% 
    summarise(Topcomp = paste(Company[min(cnt) == cnt], collapse = ",")) 
+0

आप 'सी' और 'कौन सा' निकाल सकते हैं। – alistaire

+0

धन्यवाद, यह काम किया ... –

6

आप क्या करना चाहिए इस:

final= df %>% 
    group_by(xxx,yyyy) %>% 
    summarise(Topcomp=toString(Company[c(which(min(cnt)==cnt))])) 
##Source: local data frame [2 x 3] 
##Groups: xxx [?] 
## 
## xxx yyyy Topcomp 
## <int> <int> <chr> 
##1  1  1 aaa, bbb 
##2  2  0  ddd 

आपको त्रुटि मिल रहे थे क्योंकि which दो मानों लौट आए ताकि Company के अपने सबसेट दो मानों जब है summarise को एक मूल्य की आवश्यकता है। toStringpaste के समान collapse="," के समान है जिसमें यह दो मानों को अल्पविराम से अलग स्ट्रिंग में ध्वस्त कर देता है।

इसके अलावा, जैसा alistaire अन्य जवाब के लिए उसकी टिप्पणी में बताया, तो आप c और which की जरूरत नहीं है, तो यह करने के लिए सरल किया जा सकता:

final= df %>% 
    group_by(xxx,yyyy) %>% 
    summarise(Topcomp=toString(Company[min(cnt)==cnt])) 
+1

धन्यवाद यह काम किया –