【问题标题】:count variable grouped by two variables按两个变量分组的计数变量
【发布时间】:2013-08-31 05:13:40
【问题描述】:

我们都知道 R 中的函数 table。我正在寻找一个函数,以在使用 table(x,y) 时获得相同的输出,但不是针对 x 和 y 的每个值组合的计数,而是针对另一个变量 z 的计数。在 data.table 中,dt[,sum(z),by=c("x","y")] 可以做到这一点。但这并没有给我一个等于 table(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

【问题讨论】:

    标签: r data.table plyr reshape


    【解决方案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
    

    【讨论】:

    • 但这不是他们要求的。
    【解决方案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
    

    【讨论】:

    • 谢谢,这很有趣,我在使用 data.table 时完全忘记了 tapply!
    猜你喜欢
    • 2018-01-14
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2022-08-04
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多