[英]R Dplyr: Group by two variables and count the number of rows of the outer group
[英]Count number of rows by group using dplyr
我正在使用mtcars
數據集。 我想查找特定數據組合的記錄數。 與 SQL 中的count(*)
group by 子句非常相似。 來自plyr的ddply()
為我工作
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.