gpt4 book ai didi

r - 寻找最小正值

转载 作者:行者123 更新时间:2023-12-02 15:25:47 25 4
gpt4 key购买 nike

我想我并不像我想的那样知道which.min

我试图在向量中找到最小值为正的事件。

TIME <- c(0.00000,  4.47104,  6.10598,  6.73993,  8.17467,  8.80862, 10.00980, 11.01080, 14.78110, 15.51520, 16.51620, 17.11680)

我想知道对于 1 到 19 的值 z,上述向量 TIME 的索引包含最接近但高于 z 的值。我尝试了以下代码:

vec <- sapply(seq(1,19,1), function(z) which.min((z-TIME > 0)))
vec

#[1] 2 2 2 2 3 3 5 5 7 7 8 9 9 9 10 11 12 1 1

在我看来,vec 的最后两个值应该是 '12, 12'。它这样做的原因是因为它认为“0.0000”最接近 0。

所以,我认为可能是因为我从外部软件导出了数据,而 0.0000 并不是真正的 0。但是,

TIME[1]==0  #TRUE

然后我就更糊涂了。为什么这些给出索引 1 的答案,而实际上它们应该是 ERROR?

which.min(0 > 0 ) #1
which.min(-1 > 0 ) #1

我很高兴被纠正过来。

编辑:

我想简而言之,获得此结果的更好方法是什么:

#[1] 2  2  2  2  3  3  5  5  7  7  8  9  9  9 10 11 12  12  12

当从 1 到 19 的值中减去 TIME 的每个元素时,它显示给出最小可能正值的 TIME 索引。

最佳答案

这里使用的自然函数(限制输入和提高效率)实际上不是 which.min + sapply 而是 cut函数,它将确定每个值 1:19 属于哪个时间范围:

cut(1:19, breaks=TIME, right=FALSE)
# [1] [0,4.47) [0,4.47) [0,4.47) [0,4.47) [4.47,6.11) [4.47,6.11) [6.74,8.17)
# [8] [6.74,8.17) [8.81,10) [8.81,10) [10,11) [11,14.8) [11,14.8) [11,14.8)
# [15] [14.8,15.5) [15.5,16.5) [16.5,17.1) <NA> <NA>
# 11 Levels: [0,4.47) [4.47,6.11) [6.11,6.74) [6.74,8.17) [8.17,8.81) ... [16.5,17.1)

由此,您可以轻松确定要查找的内容,即 TIME 中大于截止值的最小元素的索引:

(x <- as.numeric(cut(1:19, breaks=TIME, right=FALSE))+1)
# [1] 2 2 2 2 3 3 5 5 7 7 8 9 9 9 10 11 12 NA NA

最后两个条目显示为 NA,因为 TIME 中没有超过 18 或 19 的元素。如果您想用 TIME 中最大的元素替换它们,你可以用 replace 来做到这一点:

replace(x, is.na(x), length(TIME))
# [1] 2 2 2 2 3 3 5 5 7 7 8 9 9 9 10 11 12 12 12

关于r - 寻找最小正值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30468145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com