gpt4 book ai didi

R:查找低于阈值的连续值

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

我需要在风速测量的数据帧中找到小于特定阈值的连续值。我正在寻找阈值以下的 2 个连续观察值。我想返回满足这些条件的系列的第一次观察的位置。

最佳答案

以下应该适用于您的要求:

# create random vector, for example
set.seed(1234)
temp <- rnorm(50)

# get position of all observations that fulfill criterion, here obs is > 0.2
thresholdObs <- which(temp > .2)

此处,which 返回满足某些条件的所有观测值的位置。在这一点上,谨慎的做法是测试是否有任何观察结果满足您的标准。这可以通过 intersect 函数或子集与 %in% 运算符一起实现:

length(intersect(thresholdObs, thresholdObs + 1))

length(thresholdObs[thresholdObs %in% (thresholdObs + 1L)])

如果返回长度为 0,则表示您的数据中没有此类观察结果。如果长度为 1 或更大,则可以使用

# get the answer
min(thresholdObs[thresholdObs %in% (thresholdObs + 1L)] - 1)

min(intersect(thresholdObs, thresholdObs + 1))-1

正如@Frank 在下面指出的那样,如果 min 被输入一个长度为 0 的向量,它返回 Inf,这意味着 R 中的无穷大。我递增这些位置 thresholdObs + 1 和 the 取这两组的交集。返回的唯一位置是先前位置通过阈值测试的位置。然后我从这些位置中减去 1 并取最小值以获得所需的结果。因为 which 将返回有序结果,所以下面的代码也可以工作:

intersect(thresholdObs, thresholdObs + 1)[1] - 1

其中 [1] 提取交集中的第一个元素。

还要注意

intersect(thresholdObs, thresholdObs + 1) - 1

thresholdObs[thresholdObs %in% (thresholdObs + 1L)]

将返回至少有两个连续元素超过阈值的所有位置。但是,对于连续超过阈值且大于 2 的值,将返回多个位置。

关于R:查找低于阈值的连续值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37141381/

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