gpt4 book ai didi

r - 查找 X 为中点的范围值

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

我有一组从 0 到 1 的数字。给定该组中的值 X,我想找到范围值(高值和低值),其中该组值中的 Y% 位于高值范围内和低,其中 X 是中点。

假设数字是均匀分布的。给定 X=0.4 和 Y=20%,我需要一个函数来给出:

高 = 0.5低 = 0.3

如何在 R 中做到这一点?

最佳答案

更新:根据评论中的额外信息,这将满足OP的要求:

foobar <- function(x, mid, y) {
## x, input data on range 0,1
## mid, midpoint X in OP's Q
## y, % of points around mid
sx <- sort(x)
want <- sx >= mid
## what do you want to do if y% of x is not integer?
num <- floor(((y/100) * length(x)) / 2)
high <- if((len <- length(want[want])) == 0) {
1
} else {
if(len < num) {
tail(sx, 1)
} else {
sx[want][num]
}
}
low <- if((len <- length(want[!want])) == 0) {
0
} else {
if(len < num) {
head(sx, 1)
} else {
rev(sx[!want])[num]
}
}
res <- c(low, high)
names(res) <- c("low","high")
res
}

对于间隔 0,1 上的随机值样本,给出以下结果:

> set.seed(1)
> x <- runif(20)
> sort(x)
[1] 0.06178627 0.17655675 0.20168193 0.20597457 0.26550866 0.37212390
[7] 0.38003518 0.38410372 0.49769924 0.57285336 0.62911404 0.66079779
[13] 0.68702285 0.71761851 0.76984142 0.77744522 0.89838968 0.90820779
[19] 0.94467527 0.99190609
> foobar(x, 0.4, 20)
low high
0.3800352 0.5728534

OP 已经回答了下面的问题,上面的函数版本按照要求并根据评论进行了操作。

有几个问题需要处理:

  • 如果 y 你想做什么% 的数据不是整数? 此时,如果 y % 的数据评估为 4.2我四舍五入为 floor(4.2)但我们可以四舍五入为 ceiling(4.2) .
  • 如果所选中点上方或下方有 0 个值,您想做什么?此时,在这些情况下代码会返回指定的极值 (0,1)。
  • 如果有一些值高于/低于中点,但在给定方向上不足以包含 y/2,您想要做什么% 在任一方向? 目前,我返回位于中点上方/下方的数据极值点。但这与前一点有点不一致,在这种情况下我们是否也应该返回极值 0、1?

原始:假设您陈述的假设(均匀分布在范围 0,1 上),这将为您提供您想要的内容

foo <- function(x, y) {
## x is the mid-point
## y is the % range about x, i.e. y/2 either side of x
x + (c(-1,1) * (((y/100) / 2) * 1))
}

> foo(0.4, 20)
[1] 0.3 0.5

我们可以扩展该函数以允许默认值 0、1 的任意范围:

bar <- function(x, y, min = 0, max = 1) {
## x is the mid-point
## y is the % range about x, i.e. y/2 either side of x
## min, max, the lower and upper bounds on the data
stopifnot(x >= min & x <= max)
x + (c(-1,1) * (((y/100) / 2) * (max - min)))
}

> bar(0.4, 20)
[1] 0.3 0.5
> bar(0.6, 20, 0.5, 1)
[1] 0.55 0.65
> bar(0.4, 20, 0.5, 1)
Error: x >= min & x <= max is not TRUE

关于r - 查找 X 为中点的范围值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5705635/

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