dplyr을 사용하여 그룹 별 행 수 계산


83

mtcars데이터 세트를 사용하고 있습니다. 특정 데이터 조합에 대한 레코드 수를 찾고 싶습니다. count(*)SQL 의 group by 절 과 매우 유사한 것 입니다. 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. 어떤 버전의 dplyr을 사용하고 있습니까? 업데이트 하시겠습니까?
joran 2014 년

최신 버전 0.1.3이 있습니다. 0.1.2가 있습니까?
charmee 2014 년

아니. 귀하의 예제는 0.1.3에서 잘 작동합니다.
joran

1
어떤 버전의 R이 있습니까? 그것이 행동의 차이를 유발할 수 있습니까? 또한 .. 우분투, 같은 일을 사용하고 집에서 컴퓨터에이 시도
charmee

2
감사!!! 그것은 그것을 해결했습니다. plyr 및 dplyr 패키지가 모두 첨부 된 경우 요약이 예상대로 작동하지 않습니다. 세션을 다시 시작하자마자 (기본적으로 모든 일반 패키지를 첨부하지 않음) 제대로 작동 할 수있었습니다. 휴.
charmee

답변:


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 패키지를 사용하고 있습니다. 이것은 본질적으로 docendo discimus에서 제공하는 count () 솔루션의 긴 버전입니다.


나를 위해 작동합니다. 중요한 부분은 그룹화 할 열 이름 주위에 따옴표를 지정하지 않는 것입니다.
ivan866

3

더 우아하지는 않지만 특정 열을 참조 할 필요가없는 또 다른 옵션 :

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

1
그냥 당신에게주는 nrow데이터 집합이 아닌 그룹
해킹-R
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.