您好我是R的新手并且一直在尝试找到实现以下内容的解决方案:
我有Matrix A(原始数据集):
ActiveSheet
Matrix B我使用Matrix A创建了i&的不同组合。 j及其匹配" Flow"价值Si& SJ
列"最大值"是我想要的理想结果:
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行作为我要做的事情的一个例子:
对于第2行,“最大值”&#39;必需结果中的列显示等于0.49 这是因为我在查找矩阵A第2列中的最大值,从大于i = 1的行到小于j = 4的行(即max(0.49,0.36))
问题是查找每行的Matrix A更改列2中的最大值的范围,并由i&amp;矩阵B中的j值。
我该如何实现? 很抱歉,如果已在其他地方得到解答,但我确实搜索了解决方案,但无法找到类似的查询。
提前致谢
答案 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