2015-12-31 27 views
1

在R中的矢量,如果我有一個數據喜歡:在R中查找大多數矢量的好方法?

1 1 2 1 1 3 3 1 1

在這種情況下,1是多數。

當然,我可以循環訪問列表並手動計數,但是在R中有沒有更好的方法來找到向量中的主要值?

+1

可能的重複:http://stackoverflow.com/q/2547402/903061 – Gregor

回答

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

是要問關於計數... –

+0

我不認爲你的解決方案與'x [which.max(table(x) )]'的作品。嘗試'x < - c(5,5,2,5,5,3,3,5,5)'。 – RHertel

+1

@RHertel對。如何使用'names'?查看更新。 –

1

我們可以加快使用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; 
} 

然後table功能,我們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 
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,名稱是「5」。該輸出提供最頻繁輸入的信息,即矢量中包含的第三個唯一編號,按升序計數(這裏的編號爲2,3和5),並且它具有「名稱」5。在由數字組成的矢量的情況下,這個數字的命名可能看起來很奇怪,但矢量也可以包含單詞,如「紅色」,「藍色」,「綠色」,然後知道最頻繁的單詞的名稱肯定會有用的。

我們只對名稱感興趣,我們可以使用函數names()來提取該名稱。結果是一個字符,在我們的例子中可以使用as.numeric()強制爲一個整數。