2016-08-14 5 views
1

각 그룹별로 요인/범주 변수 값 빈도를 가져 오려고합니다.data.table (R)의 그룹 별 빈도 테이블

다음은 작동하지 않습니다

library(data.table) 
dt<-data.table(fac=c("l1","l1","l2"),grp=c("A","B","B")) 
dt[,fac:=as.factor(fac)] 
dt[,list(table(fac)),by=grp] 

오류 메시지는 다음과 같습니다

Error in `[.data.table`(dt, , list(table(fac)), by = grp) : 
    All items in j=list(...) should be atomic vectors or lists. If you are trying something like j=list(.SD,newcol=mean(colA)) then use := by group instead (much quicker), or cbind or merge afterwards. 

이 작업을 accomblish 할 수있는 간단한 방법이 있을까요? 감사.

+1

'dt [, as.list (table), by = grp]'어쩌면 –

+0

오 와우. 그게 다야! 고맙습니다. :) – Julian

+2

또는 dcast 함수에 대해 – Frank

답변

2

우리는 dcast을 사용할 수 있으며 OP 코드의 두 번째 및 세 번째 줄을 건너 뛸 수 있습니다.

dcast(dt, grp~fac, length) 
# grp l1 l2 
#1: A 1 0 
#2: B 1 1 
+1

('dt, table (grp, fac)) '을 사용하십시오. 먼저 data.table 라이브러리를로드하십시오 : require ("data.table") – maycca

+0

@maycca 맞습니다. OP 게시물에 라이브러리로드가 표시되었으므로 보여주지 않았습니다. – akrun