Dplyr का उपयोग करके समूह द्वारा पंक्तियों की संख्या की गणना करें


83

मैं mtcarsडेटासेट का उपयोग कर रहा हूं । मैं डेटा के एक विशेष संयोजन के लिए रिकॉर्ड की संख्या खोजना चाहता हूं। count(*)SQL में क्लॉज द्वारा समूह के समान कुछ । ddply()से plyr मेरे लिए काम कर रहा है

library(plyr)
ddply(mtcars, .(cyl,gear),nrow)

आउटपुट है

  cyl gear V1
1   4    3  1
2   4    4  8
3   4    5  2
4   6    3  2
5   6    4  4
6   6    5  1
7   8    3 12
8   8    5  2

इस कोड का उपयोग करना

library(dplyr)
g <- group_by(mtcars, cyl, gear)
summarise(g, length(gear))

आउटपुट है

  length(cyl)
1          32

मुझे पास करने के लिए विभिन्न कार्य मिले summarise()लेकिन कोई भी मेरे लिए काम नहीं करता है। एक फ़ंक्शन मुझे मिला sum(G), जो वापस आ गया

Error in eval(expr, envir, enclos) : object 'G' not found

का उपयोग करने की कोशिश की n(), जो वापस आ गया

Error in n() : This function should not be called directly

मैं क्या गलत कर रहा हूं? मैं अपने लिए काम कैसे कर सकता group_by()/ सकती हूं summarise()?


मैं इसे पुन: पेश नहीं कर सकता। मुझे उसी से आउटपुट मिलता है ddply। आप किस संस्करण पर हैं? अपडेट करने का प्रयास करें?
जोरन

मेरे पास नवीनतम संस्करण 0.1.3 है। क्या आपके पास 0.1.2 है?
चार्मी

नहीं। आपका उदाहरण 0.1.3 के साथ मेरे लिए ठीक काम करता है।
जोरान

1
आपके पास R का कौन सा संस्करण है? कि व्यवहार में अंतर पैदा कर सकता है? मैंने घर पर एक कंप्यूटर पर भी यह कोशिश की, जो उबंटू का उपयोग कर रहा है, वही ..
18

2
धन्यवाद!!! इससे हल हो गया। यदि मेरे पास प्लायर और डीपीएलआर दोनों पैकेज संलग्न हैं, तो संक्षेप में अपेक्षा के अनुरूप काम नहीं होता है। जैसे ही मैंने सत्र को फिर से शुरू किया (और डिफ़ॉल्ट रूप से सभी सामान्य पैकेजों को संलग्न नहीं किया) मैं इसे काम करने में सक्षम था। पाँव
चार्मी

जवाबों:


126

n()पंक्तियों को गिनने के लिए dplyr में एक विशेष कार्य है (संभवतः समूहों के भीतर):

library(dplyr)
mtcars %>% 
  group_by(cyl, gear) %>% 
  summarise(n = n())
#Source: local data frame [8 x 3]
#Groups: cyl [?]
#
#    cyl  gear     n
#  (dbl) (dbl) (int)
#1     4     3     1
#2     4     4     8
#3     4     5     2
#4     6     3     2
#5     6     4     4
#6     6     5     1
#7     8     3    12
#8     8     5     2

लेकिन dplyr एक आसान countफ़ंक्शन भी प्रदान करता है जो कम टाइपिंग के साथ ठीक वैसा ही करता है:

count(mtcars, cyl, gear)          # or mtcars %>% count(cyl, gear)
#Source: local data frame [8 x 3]
#Groups: cyl [?]
#
#    cyl  gear     n
#  (dbl) (dbl) (int)
#1     4     3     1
#2     4     4     8
#3     4     5     2
#4     6     3     2
#5     6     4     4
#6     6     5     1
#7     8     3    12
#8     8     5     2

16

दूसरा दृष्टिकोण दोहरे कॉलनों का उपयोग करना है:

mtcars %>% 
  dplyr::group_by(cyl, gear) %>%
  dplyr::summarise(length(gear))

9

मुझे लगता है कि आप जो देख रहे हैं वह इस प्रकार है।

cars_by_cylinders_gears <- mtcars %>%
  group_by(cyl, gear) %>%
  summarise(count = n())

यह dplyr पैकेज का उपयोग कर रहा है। यह अनिवार्य रूप से डॉकेंडो डिस्कसस द्वारा प्रदान की गई गणना () समाधान का लंबा संस्करण है।


मेरे लिये कार्य करता है। महत्वपूर्ण भाग कॉलम नामों के आसपास के उद्धरणों को समूह द्वारा निर्दिष्ट नहीं कर रहा है।
ivan866

3

एक अन्य विकल्प, अति सुंदर नहीं है, लेकिन एक विशिष्ट कॉलम को संदर्भित करने की आवश्यकता नहीं है:

mtcars %>% 
  group_by(cyl, gear) %>%
  do(data.frame(nrow=nrow(.)))

1
यह सिर्फ आपको nrowडेटासेट का समूह नहीं देता है
Hack-R
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.