我的数据框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
答案 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))