【发布时间】:2013-02-18 04:52:54
【问题描述】:
我正在尝试从矩阵中的列中获取最小值(大于 0),然后使用发生最小值的行号来计算一个值(作为公式)应用于最小值以下的所有行行(之前已确定)。
让我用一个例子来演示: 如果我将 x 定义为:
x<-rbind(c(0, 0, 0), c(0,0,3), c(0,3,5))
这样x 是:
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 3
[3,] 0 3 5
然后我想确定第 1 列没有最小值,第 2 列在索引 3 处有最小值,第 3 列在索引 2 处有最小值。
因此,我创建了以下尝试来创建最小值向量:
min<-apply(x,2,function (v) min(which(v>0), na.rm = TRUE))
这给了我一个警告:
Warning message:
In min(which(v > 0), na.rm = TRUE) :
no non-missing arguments to min; returning Inf
(问题1):我不知道如何避免。
(问题 2): 我现在需要取最小值(存在一个)的结果并根据向量 min 的值计算函数的值,以及使用向量 min 的索引从不同的矩阵中选择一个值 @ 987654326@这个我玩了一会儿,没有使用循环,不知道该怎么做。
回到例子,min中的第一个值是Inf,所以我的向量calc.results得到0,min中的下一个值是3,所以从矩阵st我想选择第 2 列 (3) 中的第 3 行,然后使用该值计算 calc.results 等中的第 2 列的结果。操作完成后,calc.results 看起来像(例如简单性,什么都不是使用来自st 的值完成):
[1] 0 3 3
然后我需要将calc.results 应用回矩阵st,方法是仅在我到达前面在min 中标识的行之后减去calc.results 的值(min 的索引等于st) 所有其他行都保持不变。
在示例中,最终结果如下所示:
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
[3,] 0 0 2
因为在第 2 列,min 的值为 3,而在第 2 列 calc.results 的值为 3,st 在第 3 行的第 2 列中减去了 3,等等(注意事实上,列清零是此示例的产物,通常不正确)。
【问题讨论】:
-
使用
which.min,..... -
我玩过,但无法让它正常工作。
标签: r