문제

다음 데이터 프레임에 대한 계산을 원합니다.

> Santa
   Believe Age Gender Presents Behaviour
1    FALSE   9   male       25   naughty
2     TRUE   5   male       20      nice
3     TRUE   4 female       30      nice
4     TRUE   4   male       34   naughty

믿는 아이들의 수. 이것을 얻기 위해 어떤 명령을 사용합니까?

(실제 데이터 프레임이 훨씬 큽니다. 방금 처음 네 행을주었습니다 ...)

감사!

도움이 되었습니까?

해결책

당신은 사용할 수 있습니다 table:

R> x <- read.table(textConnection('
   Believe Age Gender Presents Behaviour
1    FALSE   9   male       25   naughty
2     TRUE   5   male       20      nice
3     TRUE   4 female       30      nice
4     TRUE   4   male       34   naughty'
), header=TRUE)

R> table(x$Believe)

FALSE  TRUE 
    1     3 

다른 팁

나는 이것을 2 단계 과정으로 생각합니다.

  1. 제공된 필터에 따라 원래 데이터 프레임을 서브셋하십시오 (믿음 == 거짓). 그 다음에

  2. 이 서브 세트의 행 카운트를 얻으십시오

첫 번째 단계에서 서브 세트 기능은이 작업을 수행하는 좋은 방법입니다 (일반 색인의 대안 또는 까치발 표기법).

두 번째 단계에서는 사용할 것입니다 어둑한 또는 nrow

사용의 장점 중 하나 서브 세트: 필요한 결과를 얻으려면 결과를 구문 분석 할 필요가 없습니다. nrow 직접.

따라서 귀하의 경우 :

v = nrow(subset(Santa, Believe==FALSE))     # 'subset' returns a data.frame

또는에 싸서 익명 기능:

>> fnx = function(fac, lev){nrow(subset(Santa, fac==lev))}

>> fnx(Believe, TRUE)
      3

제외 nrow, 어둑한 또한 일을 할 것입니다. 이 함수는 다음을 반환합니다 치수 데이터 프레임 (행, col)의 경우 행 수에 액세스하려면 적절한 색인을 제공하면됩니다.

v = dim(subset(Santa, Believe==FALSE))[1] 

이 전에 게시 된 OP에 대한 답변은 우발 테이블의 사용을 보여줍니다. 나는 OP에서 인용 한 일반적인 문제에 대한 그 접근법이 마음에 들지 않습니다. 이유는 다음과 같습니다. 물론, 일반적인 문제 이 데이터 프레임의 몇 줄에는 C 열에 x x가 있습니까? 우발 테이블을 사용하여 대답 할 수 있으며 "필터링"체계를 사용할 수 있습니다 (여기서 내 대답에서와 같이). 주어진 요소 변수 (열)의 모든 값에 대해 행 계산을 원한다면 우발 사태 테이블 (호출을 통해 테이블 그리고 관심있는 열을 통과하는 것이 가장 합리적인 솔루션입니다. 그러나 OP는 특정한 요인 변수의 값은 모든 값에서 계산되지 않습니다. 성능 히트 외에도 (클 수 있으며, 사소 할 수 있습니다. 단지 데이터 프레임의 크기 와이 기능이있는 처리 파이프 라인 컨텍스트에 따라 다릅니다). 그리고 물론 테이블에 대한 호출의 결과가 반환되면 여전히 구문 분석 그 결과 당신이 원하는 수를 얻습니다.

그래서 나에게 이것은 크로스 타브 문제가 아닌 필터링입니다.

sum(Santa$Believe)

넌 할 수있어 summary(santa$Believe) 그리고 당신은 카운트를 얻을 것입니다 TRUE 그리고 FALSE

dplyr는 이것을 정말 쉽게 만듭니다.

x<-santa%>%
   count(Believe)

당신이 그룹으로 계산하고 싶다면; 예를 들어, 얼마나 많은 남성 v 여성이 믿고 group_by:

x<-santa%>%
   group_by(Gender)%>%
   count(Believe)

한 줄 솔루션 data.table 할 수 있습니다

library(data.table)
setDT(x)[,.N,by=Believe]
   Believe N
1:   FALSE 1
2:    TRUE 3

사용 sqldf 여기에 적합 :

library(sqldf)
sqldf("SELECT Believe, Count(1) as N FROM Santa
       GROUP BY Believe")
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top