计数由两个变量分组的变量

时间:2013-08-28 08:16:50

标签: r data.table plyr reshape

我们都知道R中的函数table。我正在搜索一个函数,在使用table(x,y)时获得相同的输出,但是不计算x和y的每个值组合的计数,但是另一个变量z。在data.table中,dt[,sum(z),by=c("x","y")]可以实现这一点。但这并没有给我一个等于表(x,y) - 输出的输出。我试过dcast但也没得到我想要的东西

 dt <- data.table(y=rep(letters[1:2],each=3),x=rep(letters[1:2],length=6),z=rep(letters [7],length=6))  
   y x z
1: a a g
2: a b g
3: a a g
4: b b g
5: b a g
6: b b g

它应具有此输出,但计数为g:

    y
 x   a b
   a 2 1
   b 1 2

我想得到这些结果,但是以表格的形式出现:

   x y V1
1: a a  2
2: b a  1
3: b b  2
4: a b  1

2 个答案:

答案 0 :(得分:2)

DF <- data.frame(y=rep(letters[1:2],each=3),
                 x=rep(letters[1:2],length=6),
                 z=rep(letters [7],length=6)) 

tapply(X=DF$z, INDEX=list(DF$x, DF$y), FUN=length)
#  a b
#a 2 1
#b 1 2

答案 1 :(得分:1)

您可以尝试使用'plyr'包

 install.packages('plyr');
 library('plyr');
 ddply(dt,.variables=c("y","x"),.fun=count)[,c(1:2,4)];

给出

   y x freq
 1 a a  2
 2 a b  1
 3 b a  1
 4 b b  2