按列分组,分类并计算字符串出现次数

Group by column, categorize and count string occurrences

我有一个问题,我自己无法解决;我的 table 看起来像这样:

Type    Model
-----------------
Car     Mercedes
Car     BMW
Plane   Airbus
Car     BMW
Car     Audi
Plane   Boeing
Plane   Airbus
Car     Mercedes
Car     BMW

我想做的是按类型对我的模型进行分组,然后聚合并计算它们的频率,它看起来像这样:

Car       6
Mercedes  2
BMW       3
Audi      1

Plane     3
Airbus    2
Boeing    1

如果你能帮助我,那就太好了。到目前为止,我只是找到了一个解决方案来计算一般的频率,但不能同时对我的值进行分类。

table 应该可以满足您的需求。

table(rev(x))
#           Type
# Model      Car Plane
#   Airbus     0     2
#   Audi       1     0
#   BMW        3     0
#   Boeing     0     1
#   Mercedes   2     0

您可能还对addmargins感兴趣:

addmargins(table(rev(x)))
#           Type
# Model      Car Plane Sum
#   Airbus     0     2   2
#   Audi       1     0   1
#   BMW        3     0   3
#   Boeing     0     1   1
#   Mercedes   2     0   2
#   Sum        6     3   9

addmargins(table(rev(x)), 1) 只会给你列总和,而不是列和行。


如果您不喜欢,您可以尝试加入 splitbytapply 方法:

with(x, by(Model, Type, function(x) data.frame(addmargins(table(droplevels(x))))))
# Type: Car
#       Var1 Freq
# 1     Audi    1
# 2      BMW    3
# 3 Mercedes    2
# 4      Sum    6
# -------------------------------------------------------------------- 
# Type: Plane
#     Var1 Freq
# 1 Airbus    2
# 2 Boeing    1
# 3    Sum    3