2015-01-27 15 views
11
ID= c('A', 'A', 'A', 'B', 'B', 'B') 
color=c('white', 'green', 'orange', 'white', 'green', 'green') 

d = data.frame (ID, color) 

मेरे वांछित परिणामसमूह द्वारा अद्वितीय मूल्यों की संख्या को कैसे गिनें?

unique_colors=c(3,3,3,2,2,2) 
d = data.frame (ID, color, unique_colors) 

या एक नया dataframe सी में और अधिक स्पष्ट है

ID= c('A','B') 
unique_colors=c(3,2) 
c = data.frame (ID,unique_colors) 

मैं aggregate और ave के साथ-साथ by और with के विभिन्न संयोजनों और मुझे लगता है की कोशिश की है यह उन कार्यों का एक संयोजन है।

समाधान शामिल होंगे:

length(unique(d$color)) 

अद्वितीय तत्व की संख्या की गणना करने के लिए।

+1

भी [** यहाँ **] (http://stackoverflow.com/questions/17421776/how-to-add-count-of-unique-values-by-group-to-r देखें -डाटा-फ्रेम/17421 925 # 17421 9 25), (उस क्यू पर कुछ हद तक समान शीर्षक ... क्या आपने पोस्टिंग से पहले खोज की थी?) अतिरिक्त संभावनाओं के लिए – Henrik

+0

@ हेनरिक वास्तव में जुड़े हुए उत्तर में न तो 'dplyr' या (अद्यतित) 'data.table' समाधान। तो मुझे लगता है कि यह नया सवाल एक तरह से उपयोगी है। –

+0

@ डॉकेंडोडिस्किमस यही कारण है कि मैंने कहा * (अद्यतित) 'data.table' समाधान *। यह नए 'data.table :: uniqueN()' फ़ंक्शन को शामिल नहीं करता है। 'Data.table' समाधान मूल रूप से आधार समाधान है। –

उत्तर

36

मुझे लगता है कि आपको यह सब गलत मिला है। data.table का उपयोग करते समय plyr या <- में कोई आवश्यकता नहीं है। data.table, वी> = 1.9.6, के

हाल संस्करणों एक नया कार्य uniqueN() सिर्फ इतना है कि के लिए की है।

library(data.table) ## >= v1.9.6 
setDT(d)[, .(count = uniqueN(color)), by = ID] 
# ID count 
# 1: A  3 
# 2: B  2 

आप मायने रखता है के साथ एक नया स्तंभ बनाने के लिए चाहते हैं, := ऑपरेटर का उपयोग

setDT(d)[, count := uniqueN(color), by = ID] 

या dplyr साथ n_distinct समारोह

library(dplyr) 
d %>% 
    group_by(ID) %>% 
    summarise(count = n_distinct(color)) 
# Source: local data table [2 x 2] 
# 
# ID count 
# 1 A  3 
# 2 B  2 

या का उपयोग करें (यदि आप एक नया कॉलम चाहते हैं)के बजाय mutate का उपयोग करें

d %>% 
    group_by(ID) %>% 
    mutate(count = n_distinct(color)) 
+1

आप इतने तेज़ थे :-) 'अद्वितीय एन' – akrun

+2

@akrun के लिए धन्यवाद, मैंने विशेष रूप से अरुण को' अद्वितीय 'बनाने के लिए अनुरोध किया है, इसलिए मुझे इसे अंततः एक उत्तर के रूप में पोस्ट करना पड़ा :) –

+0

और एक गरीब व्यक्ति का कार्य' (डी, एवी (as.numeric (रंग), आईडी, FUN = समारोह (एक्स) लंबाई (अद्वितीय (एक्स))) ' – akrun

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