2016-09-22 130 views
0

我知道which.max能夠告訴我第一次出現的最大值的索引,但是我想獲得所有索引的最大索引值給定的重複最大值的最大值範圍。索引R中重複最大值的最大值

以下是我正在使用的數據。

#Given Data Set 
Dataset1 <- data.frame(Index=1:6, Value=c(.456,.92,.88,.92,.88,0.85)) 
Dataset1 

# Index Value 
1  1 0.456 
2  2 0.920 
3  3 0.880 
4  4 0.920 
5  5 0.880 
6  6 0.850 

#-------------------------- 

#Create Filtered Combinations 
N=nrow(Dataset1) 

Comb<-data.frame(t(combn(seq(1:(N)), 2))) 
library("plyr") 
library("dplyr") 
FComb<-Comb %>% 
    filter(X2-X1>1) %>% 
    select(X1,X2) 

FComb.mat<-as.matrix(FComb) #Filtered Combination set as matrix 
colnames(FComb.mat)[1:2] <- c("ind1","ind2") 

#-------------------------- 

#Finding maximum value from original dataset in the range between "ind1" & "ind2" 
fun <- function(x,y) max(Dataset1$Value[(.x <- x:y)[-c(1, length(.x))]]) 
Max.Val = as.matrix(mapply(fun, FComb.mat[,1], FComb.mat[,2])) 

問題:

我想獲得最後一列 「IndexMax」,如下圖所示。

例如對於ind1 = 1 & ind2 = 5(即行#3),來自Index = 1:5之間的Dataset1的最大流量值是0.920。這個最大值的索引可以是2或4,但我想選擇4,因爲它是索引的最大值。我將如何實現這個?

Final 
# ind1 ind2 Max.Val IndexMax 
1  1 3 0.92  2 
2  1 4 0.92  2 
3  1 5 0.92  4 
4  1 6 0.92  4 
5  2 4 0.88  3 
6  2 5 0.92  4 
7  2 6 0.92  4 
8  3 5 0.92  4 
9  3 6 0.92  4 
10 4 6 0.88  5 

在此先感謝

回答

0

其實我理解了它自己。如果這對其他人有用:

fun2 <- function(x,y) max((which(Dataset1[,2][(.x <- x:y)][-c(1,length(.x))]==max(Dataset1[,2][(.x <- x:y)][-c(1, length(.x))])))+x) 
Max.Pos=as.matrix(mapply(fun2, FComb.mat[,1],FComb.mat[,2])) 

Final<-data.frame(FComb.mat,Max.Val,Max.Pos)