【问题标题】:Summary by Row of a Categorical Variable in RR中分类变量的行汇总
【发布时间】:2011-07-13 22:50:56
【问题描述】:

我有以下矩阵

coin.flip<-expand.grid(c("H","T"),c("H","T"),c("H","T"),c("H","T"))

> coin.flip
   Var1 Var2 Var3 Var4
1     H    H    H    H
2     T    H    H    H
3     H    T    H    H
4     T    T    H    H
5     H    H    T    H
6     T    H    T    H
7     H    T    T    H
8     T    T    T    H
9     H    H    H    T
10    T    H    H    T
11    H    T    H    T
12    T    T    H    T
13    H    H    T    T
14    T    H    T    T
15    H    T    T    T
16    T    T    T    T

我想逐行汇总 H 和 T 的计数。我还想要一张表,其中有多少行有 1 T、2 T 等...

非常感谢!我一直在寻找这个答案,但还没有找到任何东西。

【问题讨论】:

    标签: r summary


    【解决方案1】:
    > coin.flip$total_H <- rowSums(coin.flip=="H")
    > coin.flip
       Var1 Var2 Var3 Var4 total_H
    1     H    H    H    H       4
    2     T    H    H    H       3
    3     H    T    H    H       3
    4     T    T    H    H       2
    5     H    H    T    H       3
    ....snipped
    > table(coin.flip$total_H)
    
    0 1 2 3 4 
    1 4 6 4 1    
    
    Total T's table is just
    > table(4- coin.flip$total_H )
    
    0 1 2 3 4 
    1 4 6 4 1     # boringly similar to total H table
    

    【讨论】:

    • 太棒了。谢谢,兄弟。我刚刚也问了一个需要“rowSums”的问题。我因为没有得到这个而自责。
    • “惊喜”在于发现 obj=="char" 适用于 data.frames。我知道它适用于矩阵,但在简化时发现相同的操作保留了结构。
    【解决方案2】:

    这是一种使用apply 然后table 的方法:

    rs <- t(apply(coin.flip,1,function(x){c(length(which(x=='H')),length(which(x=='T')))}))
    table(rs[,2])
    

    我转置了来自 apply 的结果,因为这是您可能期望它们显示的方式。

    【讨论】:

    • 嗯...看起来 rowSums() 看起来更容易。不过感谢您的回复。
    【解决方案3】:

    严格来说,coin.flip 是一个 data.frame,而不是一个矩阵。

    您可以使用 DWin 的解决方案。另一种方法是

    > summary(t(coin.flip))
     V1    V2    V3    V4    V5    V6    V7    V8    V9    V10   V11   V12   V13   V14   V15   V16  
     H:4   H:3   H:3   H:2   H:3   H:2   H:2   H:1   H:3   H:2   H:2   H:1   H:2   H:1   H:1   T:4  
           T:1   T:1   T:2   T:1   T:2   T:2   T:3   T:1   T:2   T:2   T:3   T:2   T:3   T:3  
    

    为了快速上桌,结合 DWin 和 joran 的答案

    > table(rowSums(coin.flip=="T"))
    
    0 1 2 3 4 
    1 4 6 4 1   
    

    【讨论】:

      猜你喜欢
      • 2018-10-22
      • 2021-10-06
      • 1970-01-01
      • 2013-04-29
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-03
      相关资源
      最近更新 更多