2016-08-14 16 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(テーブル(FAC))、=によるGRP]'多分 –

+0

WOWああ。それでおしまい!ありがとうございました:) – Julian

+2

dcast関数の場合は、 – Frank

答えて

2

dcastを使用して、OPコードの2行目と3行目をバイパスすることができます。

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

を 'with(dt、table(grp、fac))'とし、最初にdata.tableライブラリをロードしてください:require( "data.table") – maycca

+0

@maycca OPの投稿にライブラリの読み込みが示されていたので、私はそれを見せなかった – akrun

関連する問題