簡體   English   中英

使用 dplyr 按組計算行數

[英]Count number of rows by group using dplyr

我正在使用mtcars數據集。 我想查找特定數據組合的記錄數。 與 SQL 中的count(*) group by 子句非常相似。 來自plyrddply()為我工作

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

有output

  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))

有output

  length(cyl)
1          32

我找到了各種傳遞給summarise()的函數,但似乎沒有一個對我有用。 我發現一個 function 是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()為我工作?

dplyr 中有一個特殊的函數n()來計算行數(可能在組內):

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

另一種方法是使用雙冒號:

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

我認為您正在尋找的內容如下。

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

這是使用 dplyr 包。 這本質上是 docendo discimus 提供的 count() 解決方案的簡寫版本。

另一種選擇,不一定更優雅,但不需要引用特定列:

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

另一種選擇是使用 dplyr 中的dplyr 計數 這是一個可重現的示例:

library(dplyr)
mtcars %>% 
  group_by(cyl, gear) %>% 
  tally()
#> # A tibble: 8 × 3
#> # Groups:   cyl [3]
#>     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

使用reprex v2.0.2創建於 2022-09-11

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM