R语言众数计算公式names(sort(-table(mtcars$wt)))[1]工作原理解析
拆解R语言计算众数的公式:
names(sort(-table(mtcars$wt)))[1] 我们一步步拆解这个公式的工作逻辑:
table(mtcars$wt)
这一步会统计mtcars数据集里wt列每个唯一值的出现次数,生成一个频数统计表。比如wt列里某个重量值出现了3次,这个表就会记录该值对应频数为3。-table(mtcars$wt)
给频数表里的每个频数取负数。这么做是为了利用R中sort()默认的升序排序规则,把原频数最高的数值(最大的数)转成最小的负数,方便后续排序时排到最前面。sort(-table(mtcars$wt))
对取负后的频数表做升序排序。此时原频数最高的数值对应的负频数最小,会排在排序结果的首位,相当于间接实现了原频数的降序排序。names(sort(-table(mtcars$wt)))
提取排序后频数表的“名称”——也就是wt列的各个唯一取值。此时这些取值的顺序是按照原频数从高到低排列的。[1]
取这个名称向量的第一个元素,也就是出现次数最多的那个wt值,也就是我们要找的众数。
注意:如果
wt列存在多个频数相同的众数(即多众数情况),这个公式只会返回排序后排在最前面的那个众数,不会列出所有。
内容的提问来源于stack exchange,提问作者Ahmed Youssif
相关产品推荐
相关产品推荐

