tangerine7199
tangerine7199

Reputation: 489

Dplyr Unique count AND a general count in the same data frame

Is there a way to do this in one line of code resulting in one dataframe instead of two as seen below:

df1 <- mtcars %>% group_by(gear, carb) %>%
distinct(gear, cyl, am) %>%
summarise(UniqCnt = n()

df2 <- mtcars %>% group_by(gear, carb) %>%
summarise(Cnt = n())

I attempted this

attempt1 <- mtcars %>% (group_by(gear, carb) %>%
    distinct(gear, cyl,am) %>%
    summarise(UniqCnt = n()))  %>% 
  (group_by(gear, carb) %>%
    summarise(Cnt = n()))

but it did not work. I can rbind the two but I would prefer not to.

Thank you in advance.

Upvotes: 0

Views: 47

Answers (2)

Dave Kincaid
Dave Kincaid

Reputation: 4180

How about this:

df1 <- mtcars %>%
          group_by(gear, carb) %>%
          summarise(UniqCnt = n_distinct(gear, cyl, am),
                    Cnt = n())

Upvotes: 1

MrFlick
MrFlick

Reputation: 206242

You can use the n_distinct() function in your summarize(). For example

mtcars %>% group_by(gear, carb) %>% 
  summarize(UniqCnt = n_distinct(am), Cnt=n())

#     gear  carb UniqCnt   Cnt
#    <dbl> <dbl>   <int> <int>
#  1     3     1       1     3
#  2     3     2       1     4
#  3     3     3       1     3
#  4     3     4       1     5
#  5     4     1       1     4
#  6     4     2       2     4
#  7     4     4       2     4
#  8     5     2       1     2
#  9     5     4       1     1
# 10     5     6       1     1
# 11     5     8       1     1

Upvotes: 4

Related Questions