使用R计算数组中出现的频率

时间:2012-12-12 14:09:17

标签: r

我有一个数组

a <- c(1,1,1,1,1,2,3,4,5,5,5,5,5,6,7,7,7,7)

我想用一些命令告诉我哪个是数组中最常用的数字?

有一个简单的命令吗?

4 个答案:

答案 0 :(得分:24)

table()功能就足够了,如果您的数据有多个模式,这个功能特别有用。

请考虑以下选项,所有这些选项都与table()max()相关。


# Your vector
a = c(1,1,1,1,1,2,3,4,5,5,5,5,5,6,7,7,7,7)

# Basic frequency table
table(a)
# a
# 1 2 3 4 5 6 7 
# 5 1 1 1 5 1 4 

# Only gives me the value for highest frequency
# Doesn't tell me which number that is though
max(table(a))
# [1] 5

# Gives me a logical vector, which might be useful
# but not what you're asking for in this question
table(a) == max(table(a))
# a
#    1     2     3     4     5     6     7 
# TRUE FALSE FALSE FALSE  TRUE FALSE FALSE 

# This is probably more like what you're looking for
which(table(a) == max(table(a)))
# 1 5 
# 1 5 

# Or, maybe this
names(which(table(a) == max(table(a))))
# [1] "1" "5"

如评论中所示,在某些情况下,您可能希望查看两个或三个最常出现的值,在这种情况下sort()很有用:

sort(table(a))
# a
# 2 3 4 6 7 1 5 
# 1 1 1 1 4 5 5 

您还可以设置要在表格中返回的值的阈值。例如,如果您只想返回多次出现的数字:

sort(table(a)[table(a) > 1])
# a
# 7 1 5 
# 4 5 5 

答案 1 :(得分:4)

使用table()功能:

## Your vector:
a <- c(1,1,1,1,1,2,3,4,5,5,5,5,5,6,7,7,7,7)

## Frequency table
> counts <- table(a)

## The most frequent and its value
> counts[which.max(counts)]
# 1
# 5

## Or simply the most frequent
> names(counts)[which.max(counts)]
# [1] "1"

答案 2 :(得分:2)

我写了一些个人代码来找到模式和更多(几年前。正如Ananda所示,这是很明显的东西):

smode<-function(x){
    xtab<-table(x)
    modes<-xtab[max(xtab)==xtab]
    mag<-as.numeric(modes[1]) #in case mult. modes, this is safer
    #themodes<-names(modes)
    themodes<-as.numeric(names(modes))
    mout<-list(themodes=themodes,modeval=mag)
    return(mout)
    }

Blah blah copyright blah blah如你所愿使用但不赚钱。

答案 3 :(得分:0)

您想要的是数据模式:有多种不同的计算方法可供选择。最适合的软件包具有一组用于模式估计的功能,但对于您想要的内容可能过度。

另见:

Is there a built-in function for finding the mode?

How to compute conditional Mode in R?

希望有所帮助