दिलचस्प पोस्ट
कॉल मुख्य () खुद को सी ++ में? HTTP रेंज शीर्षलेख क्लास में 'स्टैटिक' कीवर्ड क्या करता है? स्थानीय छवि फ़ाइलों के साथ IOS WebView दूरस्थ HTML PHP में टाइमस्टैम्प की तारीख कैसे परिवर्तित करें? टास्क। स्टार्ट (), टास्क.रन () और टास्क। फ़ैक्टर। स्टार्टन्यू () का उपयोग करने के बारे में बनाम क्लास बनाम क्लासेस INNER SQL सर्वर में बाएं जुड़ने के प्रदर्शन में शामिल हों I एक वर्ग को सीरियल करना जिसमें एक std :: string है फ़ंक्शन कॉल पर टाइमआउट एंड्रॉइड स्टूडियो परियोजना संरचना (बनाम ईक्लिप्स परियोजना संरचना) Aspx / ascx फ़ाइलों के लिए .designer फ़ाइलों को पुन: उत्पन्न करने के लिए आप Visual Studio को कैसे लागू करते हैं? स्वचालित रूप से वेबक्लिएन्ट के माध्यम से gzip प्रतिक्रिया को खारिज करें। डाउनलोडडाटा "फ़ाइल को शामिल नहीं किया जा सकता है: 'config-win.h': ऐसा कोई फ़ाइल या निर्देशिका" mysql-python स्थापित नहीं करते समय UISplitViewController और अन्य दृश्य नियंत्रकों के बीच स्विच करने का सबसे अच्छा तरीका है?

समूह द्वारा अनन्य मूल्यों की संख्या को आर डेटा.फ्रेम में कैसे जोड़ें

मैं दूसरे वैरिएबल के समूहिंग के द्वारा अनन्य मानों की संख्या की गणना करना चाहता हूं, और फिर एक नया कॉलम के रूप में मौजूदा डेटा.फ्रेम में गिनती जोड़ूंगा। उदाहरण के लिए, यदि मौजूदा डेटा फ्रेम इस तरह दिखता है:

color type 1 black chair 2 black chair 3 black sofa 4 green sofa 5 green sofa 6 red sofa 7 red plate 8 blue sofa 9 blue plate 10 blue chair 

मैं प्रत्येक color लिए जोड़ना चाहता हूं, डेटा में मौजूद अद्वितीय types की गणना:

  color type unique_types 1 black chair 2 2 black chair 2 3 black sofa 2 4 green sofa 1 5 green sofa 1 6 red sofa 2 7 red plate 2 8 blue sofa 3 9 blue plate 3 10 blue chair 3 

मैं ave का उपयोग करने की उम्मीद कर रहा था, लेकिन ऐसा लगता नहीं हो सकता कि एक सीधा तरीका है जिसे कई लाइनों की आवश्यकता नहीं है। मेरे पास> 100,000 पंक्तियां हैं, इसलिए मुझे यह भी निश्चित नहीं है कि कितनी महत्वपूर्ण दक्षता है

यह इस मुद्दे की कुछ हद तक समान है: प्रति समूह में अवलोकन / पंक्तियों की संख्या की गणना करें और डेटा फ्रेम में परिणाम जोड़ें

वेब के समाधान से एकत्रित समाधान "समूह द्वारा अनन्य मूल्यों की संख्या को आर डेटा.फ्रेम में कैसे जोड़ें"

ave का उपयोग करना (जब से आप इसके लिए विशेष रूप से पूछें):

 within(df, { count <- ave(type, color, FUN=function(x) length(unique(x)))}) 

सुनिश्चित करें कि type अक्षर वेक्टर और कारक नहीं है।


चूंकि आप यह भी कहते हैं कि आपका डेटा बहुत बड़ा है और गति / प्रदर्शन इसलिए एक कारक हो सकता है, मैं एक data.table समाधान का सुझाव भी देता हूं।

 require(data.table) setDT(df)[, count := uniqueN(type), by = color] # v1.9.6+ # if you don't want df to be modified by reference ans = as.data.table(df)[, count := uniqueN(type), by = color] 

uniqueN में कार्यान्वित किया गया था और यह length(unique(.)) का एक तेज समतुल्य length(unique(.)) । इसके अलावा यह डेटा। फ्रेम / डेटा। के साथ काम करता है।


अन्य समाधान:

प्लाईर का उपयोग करना:

 require(plyr) ddply(df, .(color), mutate, count = length(unique(type))) 

aggregate का उपयोग करना:

 agg <- aggregate(data=df, type ~ color, function(x) length(unique(x))) merge(df, agg, by="color", all=TRUE) 

यहाँ dplyr पैकेज के साथ एक समाधान है – यह n_distinct() length(unique()) लिए आवरण के रूप में है length(unique())

 df %>% group_by(color) %>% mutate(unique_types = n_distinct(type)) 

यह table या tabulate साथ संयोजन के माध्यम से ग्रुप ऑपरेशंस के बिना एक vectorized में भी प्राप्त किया जा सकता है

यदि df$color का factor , तो फिर

भी

 table(unique(df)$color)[as.character(df$color)] # black black black green green red red blue blue blue # 2 2 2 1 1 2 2 3 3 3 

या

 tabulate(unique(df)$color)[as.integer(df$color)] # [1] 2 2 2 1 1 2 2 3 3 3 

अगर df$color character तो बस

 table(unique(df)$color)[df$color] 

अगर df$color एक integer तो बस

 tabulate(unique(df)$color)[df$color]