2015-05-19 57 views
-2

一個occurence的最大數目我有這樣的陣列:中的R

[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 
    [25] 1 1 1 1 2 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 1 1 
    [49] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
    [73] 1 1 1 1 1 4 3 2 5 3 2 3 3 2 3 2 3 2 3 3 2 3 3 2 
    [97] 3 2 2 2 3 2 2 2 2 2 3 2 3 3 2 3 2 1 2 2 3 2 2 3 

我需要一個函數用於返回唯一的最大出現次數的數量。在例子中,如果我使用:

table(x[1:80]) 

我會得到:

1 2 3 4 
74 3 2 1 

我怎樣才能自動值 '74'?意思是我不知道'1'還是'2'等等......是我陣列中最大的出現次數。由於

編輯:

我跑

tf<- tablulate(x): 

[1] 75 24 19 1 1 

,並試圖運行一個仿羔皮呢「爲」讓每個元素的「最大」的「製表結果」如下:

for (element in tf) 
{ 
+ b= max(table(x[element])) 
+ print (b) 
+ } 

我沒有得到預期的結果,它可能很簡單,但對我來說並不真實。 我試過這個:

> a=max(table(C[1:75])) 
[1] 72 
> b=max(table(C[76:99])) 
[1] 11 
> c=max(table(C[100:118])) 
[1] 12 
> d=max(table(C[119])) 
[1] 1 
> e=max(table(C[120])) 
[1] 1 

等等。 ,它的工作,但如果我有大數據集它真的很長,並不好笑。

+2

你可以用''max'最大(表把它包( x [1:80]))'(如果我理解正確) – akrun

+1

或'sort(table(x),decrease = T)[1]' –

+0

太棒了,它的工作。謝謝 – yokie

回答

4

到評論者的提示,如果你想有一個功能用途:

maximum <- function(vector, upto=length(vector)) { 
    max(table(vector[1:upto])) 
} 

因此適用於:

set.seed(123) 
x <- sample(1:3, 100, replace=T) 
maximum(x) 
[1] 34 

maximum(x, 55) #checking at the 55th number in the vector 
[1] 19 

更新

回答您編輯的問題。使用此功能:

maxtable <- function(vector) { 
    index <- cumsum(1:length(vector) %in% cumsum(tabulate(vector))) 
    s <- split(vector, index) 
    sapply(s, function(v) max(table(v))) 
} 

maxtable(x) 
0 1 2 3 4 5 
71 11 12 1 1 1 

編輯

我覺得這個小的變化更多的是你在找什麼:

maxtable2 <- function(vector) { 
    index <- cumsum(1:length(vector) %in% (cumsum(tabulate(vector))+1)) 
    s <- split(vector, index+1) 
    sapply(s, function(v) max(table(v))) 
} 
maxtable2(x) 
1 2 3 4 5 
72 11 12 1 1 
+0

嗨。感謝您的回答。我編輯了我的問題,請問能否和我一起檢查一下? – yokie

+0

您希望從編輯中得到什麼結果? –

+0

@yokie是否希望能夠在函數中輸入一系列值?喜歡這個? '最大(x,11:20)'只在該部分獲得最大值? –

0

在圖書館modeest中有一個功能,可讓您在那裏找到大多數名爲mfv的地方。但是本身的功能十分簡單,讓自己:

> mfv 
function (x, ...) 
{ 
    f <- factor(x) 
    tf <- tabulate(f) 
    return(as.numeric(levels(f)[tf == max(tf)])) 
} 
<environment: namespace:modeest> 

所以,你可以做sum(x == mfv(x))得到74