比較的大きなデータセットに data.table を実装しようとしていますが、同じ行の複数の列に対して関数を操作する方法がわかりません。具体的には、特定の形式の値の集計 (つまり、ヒストグラム) を列のサブセットに含む新しい列を作成したいと考えています。これは table() に似ていますが、これにも 0 エントリが含まれており、並べ替えられています。
単純化されたテスト ケース:
DF<-data.frame("A"=c("a","d","a"),"B"=c("b","a","a"),"C"=c("c","a","a"),"D"=c("a","b","c"),"E"=c("a","a","c"))
DT<-as.data.table(DF)
> DT
A B C D E
1: a b c a a
2: d a a b a
3: a a a c c
私の不格好なヒストグラム関数:
histo<-function(vec){
foo<-c("a"=0,"b"=0,"c"=0,"d"=0)
for(i in vec){foo[i]=foo[i]+1}
return(foo)}
>histo(unname(unlist(DF[1,])))
a b c d
3 1 1 0
>histo(unname(unlist(DF[2,])))
a b c d
3 1 0 1
>histo(unname(unlist(DF[3,])))
a b c d
3 0 2 0
目的の関数と出力の疑似コード
>DT[,his:=some_func_with_histo(A:E)]
>DT
A B C D E his
1: a b c a a (3,1,1,0)
2: d a a b a (3,1,0,1)
3: a a a c c (3,0,2,0)