在R中的向量中找到多数的好方法?

时间:2015-12-31 08:17:52

标签: r

在R中的矢量中,如果我有数据喜欢:

1 1 2 1 1 3 3 1 1

在这种情况下,1占多数。

当然,我可以遍历列表并手动计算,但是在R中有更好的方法来查找向量中的主要值吗?

3 个答案:

答案 0 :(得分:6)

您可以使用table

x <- c(1,1,2,1,1,3,3,1,1)
which.max(table(x))
# 1 
# 1

也许,这样的事情会更有帮助。

names(which.max(table(x)))
# "1"

另一种选择是使用count

中的plyr函数
library(plyr)
df <- count(x)
df[which.max(df$freq),1]
# [1] 1

答案 1 :(得分:2)

我们可以试试

as.numeric(names(which.max(table(x))))

示例:

x <- c(5,5,2,5,5,3,3,5,5)
#> as.numeric(names(which.max(table(x))))
#[1] 5

说明:

which.max(table(x))的结果是一个命名整数,在本例中是

#> which.max(table(x))
#5 
#3 

此处值为3,名称为&#34; 5&#34;。此输出提供的信息是,最常用的条目是向量中包含的第三个唯一编号,按升序计算(此处有序编号为:2,3和5),并且它具有&#34;名称&#34; 5。在由数字组成的向量的情况下,这个数字的命名可能看起来很奇怪,但是向量也可以包含单词,例如&#34; red&#34;,&#34; blue&#34;,&#34;绿色&#34;,然后知道最常用单词的名称肯定会有用。

我们只对名称感兴趣,我们可以使用函数names()来提取名称。结果是一个字符,在我们的例子中可以使用as.numeric()强制转换为整数。

答案 2 :(得分:1)

我们可以使用table

加快Rcpp功能
#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
std::map<double, int> tableC(NumericVector x) {
std::map<double, int> counts;
int n = x.size();
for (int i = 0; i < n; i++) {
    counts[x[i]]++;
  }

 return counts;
}

然后,我们source文件,

library(Rcpp)
sourceCpp('Table.cpp')
x <- c(1,1,2,1,1,3,3,1,1)
tableC(x)
#1 2 3 
#6 1 2 
which.max(tableC(x))
#1 
#1