문제
다음 데이터 프레임에 대한 계산을 원합니다.
> 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 단계 과정으로 생각합니다.
제공된 필터에 따라 원래 데이터 프레임을 서브셋하십시오 (믿음 == 거짓). 그 다음에
이 서브 세트의 행 카운트를 얻으십시오
첫 번째 단계에서 서브 세트 기능은이 작업을 수행하는 좋은 방법입니다 (일반 색인의 대안 또는 까치발 표기법).
두 번째 단계에서는 사용할 것입니다 어둑한 또는 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")