gpt4 book ai didi

r - 列中的最小值(大于 0)与行操作相结合

转载 作者:行者123 更新时间:2023-12-01 17:24:55 25 4
gpt4 key购买 nike

我正在尝试从矩阵中的列中获取最小值(大于 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 的索引从不同的矩阵中选择一个值 st 我已经尝试了一些,没有求助于循环,我不确定该怎么做。

回到例子,min中的第一个值是Inf,所以我的向量calc.results得到0,下一个值在 min 中是 3,所以从矩阵 st 我想在第 2 列 (3) 中选择第 3 行,然后使用此值计算第 2 行的结果calc.results 等中的列。操作完成后,calc.results 看起来像(例如,简单性,st 中的值未执行任何操作):

[1] 0 3 3

然后我需要将 calc.results 应用回矩阵 st,方法是在我达到min 中较早标识的行(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,等等(请注意,列被清零的事实是此示例的产物,通常并非如此)。

最佳答案

听起来你正在尝试做这样的事情:

apply(x, 2, function(y) { y[y > 0] <- (y[y > 0] - min(y[y > 0])); y })
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
[3,] 0 0 2

关于r - 列中的最小值(大于 0)与行操作相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14929693/

25 4 0
文章推荐: java - 返回 List 的房间查询会卡住应用程序