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

时间:2015-01-21 10:47:04

标签: r grouping frequency

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

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

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

1 个答案:

答案 0 :(得分:3)

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