使表格显示百分比而不是R中的频率

时间:2014-08-27 00:07:33

标签: r function

我的数据框df中有一些单词属于A类或B类。在每个类别中,单词可以是1,2或3类型。我使用table()函数来说明这些单词分布在各个类别和类型中。输出如下:

         category
type     A    B
1        30  79
2        12  94
3        29  6 

正如您所看到的,该表计算频率,但我希望它能够计算百分比。我试过了prop.table但是我收到了以下错误

  

FUN中的错误(X [[1L]],...):仅在具有所有数字变量的数据框上定义

我无法在其他任何地方找到解决方案;请帮忙。谢谢。

这是我的示例数据:

head(items)

       item   type category
[1]    PA100   1    A
[2]    PB101   2    A
[3]    UR360   2    A
[4]    PX977   3    B
[5]    GA008   3    B
[6]    GR446   3    A

1 个答案:

答案 0 :(得分:5)

如评论中所述,您可以在prop.table对象上使用table。在您的情况下,使用margin = 1,这意味着我们要计算表格各行的百分比。

> tab <- with(items, table(type, category))
> prop.table(tab, margin = 1)
#     category
# type         A         B
#    1 1.0000000 0.0000000
#    2 1.0000000 0.0000000
#    3 0.3333333 0.6666667

对于实际百分比,您可以将表格乘以100

> prop.table(tab, 1)*100
#     category
# type         A         B
#    1 100.00000   0.00000
#    2 100.00000   0.00000
#    3  33.33333  66.66667

,其中

items <- 
structure(list(item = structure(c(3L, 4L, 6L, 5L, 1L, 2L), .Label = c("GA008", 
"GR446", "PA100", "PB101", "PX977", "UR360"), class = "factor"), 
    type = c(1L, 2L, 2L, 3L, 3L, 3L), category = structure(c(1L, 
    1L, 1L, 2L, 2L, 1L), .Label = c("A", "B"), class = "factor")), .Names = c("item", 
"type", "category"), class = "data.frame", row.names = c(NA, 
-6L))