在R中的两个值的指定范围内查找最大值

时间:2016-09-17 14:36:35

标签: r max lookup-tables

您好我是R的新手并且一直在尝试找到实现以下内容的解决方案:

我有Matrix A(原始数据集):

ActiveSheet
  1. Matrix B我使用Matrix A创建了i&的不同组合。 j及其匹配" Flow"价值Si& SJ

  2. 列"最大值"是我想要的理想结果:

  3. Matrix B - Modified Matrix & Required result - column "Max Value" image

    Worksheets.Add.Name = Worksheets("MENU").Range("B2").Value
    

    最大值列的必需结果

    df1 <- data.frame(i=1:5, Flow=c(.87,.49,.36,.83,.87))
    df1
      i Flow
    1 1 0.87
    2 2 0.49
    3 3 0.36
    4 4 0.83
    5 5 0.87
    

    4.使用Matrix B的第2行作为我要做的事情的一个例子:

    • i = 1对应于Si = 0.87
    • j = 4对应于Sj = 0.83

    对于第2行,“最大值”&#39;必需结果中的列显示等于0.49 这是因为我在查找矩阵A第2列中的最大值,从大于i = 1的行到小于j = 4的行(即max(0.49,0.36))

    问题是查找每行的Matrix A更改列2中的最大值的范围,并由i&amp;矩阵B中的j值。

    我该如何实现? 很抱歉,如果已在其他地方得到解答,但我确实搜索了解决方案,但无法找到类似的查询。

    提前致谢

1 个答案:

答案 0 :(得分:0)

涉及几个步骤,包括索引对和最大值识别。最后,我们必须按顺序排列所有内容:

cmb <- combn(df1$i, 2)
ind <- apply(cmb, 2, diff) > 1
fun <- function(x,y) max(df1$Flow[(.x <- x:y)[-c(1, length(.x))]])
values <- mapply(fun, cmb[1,ind], cmb[2,ind])
ij <- sij <- t(cmb[,ind])
sij[] <- df1$Flow[ij]
newdf <- cbind.data.frame(ij, sij, values)
names(newdf) <- c("i", "j", "Si", "Sj", "Max")
newdf
#   i j   Si   Sj  Max
# 1 1 3 0.87 0.36 0.49
# 2 1 4 0.87 0.83 0.49
# 3 1 5 0.87 0.87 0.83
# 4 2 4 0.49 0.83 0.36
# 5 2 5 0.49 0.87 0.83
# 6 3 5 0.36 0.87 0.83