首页 文章

R中的频率计数[重复]

提问于
浏览
7

这个问题在这里已有答案:

这似乎是一个非常基本的R问题,但我很感激答案 . 我有一个以下形式的数据框:

col1    col2
a   g
a   h
a   g
b   i
b   g
b   h
c   i

我想将它转化为计数,所以结果将是这样的 . 我尝试过使用table()函数,但似乎只能获得一列的计数 .

a   b   c
g   2   1   0
h   1   1   0
i   0   1   1

我怎么在R?

2 回答

  • 9

    我不太确定你用过什么,但 table 对我来说很好!

    这是一个可重复性最小的例子:

    df <- structure(list(V1 = c("a", "a", "a", "b", "b", "b", "c"), 
                         V2 = c("g", "h", "g", "i", "g", "h", "i")), 
                    .Names = c("V1", "V2"), class = "data.frame", 
                    row.names = c(NA, -7L))
    table(df)
    #    V2
    # V1  g h i
    #   a 2 1 0
    #   b 1 1 1
    #   c 0 0 1
    

    笔记:

    • 尝试 table(df[c(2, 1)]) (或 table(df$V2, df$V1) )来交换行和列 .

    • 使用 as.data.frame.matrix(table(df)) 获取 data.frame 作为输出 . ( as.data.frame 将创建一个长 data.frame ,而不是您想要的相同输出格式的一个) .

  • 4

    使用@Ananda的 f 你可以使用 dcast

    library(reshape2)
    
    > dcast(f, V1~V2)
    Using V2 as value column: use value.var to override.
    Aggregation function missing: defaulting to length
      V1  g  h  i
    1 a   2  1  0
    2 b   1  1  1
    3 c   0  0  1
    

    但是,我写这篇文章只是为了以后你可能需要的东西不仅仅是 table (在这种情况下,这是最简单的正确答案),例如:

    set.seed(1)
    f$var <- rnorm(7)
    
    > f
      V1 V2        var
    1 a   g -0.6264538
    2 a   h  0.1836433
    3 a   g -0.8356286
    4 b   i  1.5952808
    5 b   g  0.3295078
    6 b   h -0.8204684
    7 c   i  0.4874291
    
    > dcast(f, V1~V2, value.var="var", fun.aggregate=sum)
      V1          g          h         i
    1 a  -1.4620824  0.1836433 0.0000000
    2 b   0.3295078 -0.8204684 1.5952808
    3 c   0.0000000  0.0000000 0.4874291
    

相关问题