R中重复最大值的索引最大值
Index maximum of duplicate maximum values in R
我知道which.max
能够告诉我索引中第一次出现的最大值,但是我想获得给定范围内所有索引重复最大值的最大索引值。
以下是我正在处理的数据:
#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 行),Dataset1 中 Index=1:5 之间的最大流量值为 0.920。这个最大值的索引可以是 2 或 4,但我想选择 4,因为它是 indexes.How 的最大值,我会实现这个吗?
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
其实我自己想出来了。如果这对将来其他人有用:
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)
我知道which.max
能够告诉我索引中第一次出现的最大值,但是我想获得给定范围内所有索引重复最大值的最大索引值。
以下是我正在处理的数据:
#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 行),Dataset1 中 Index=1:5 之间的最大流量值为 0.920。这个最大值的索引可以是 2 或 4,但我想选择 4,因为它是 indexes.How 的最大值,我会实现这个吗?
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
其实我自己想出来了。如果这对将来其他人有用:
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)