gpt4 book ai didi

r - 计算两个弯曲边界之间的观测值数量

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

我有一个包含 N 个观测值和两个不重叠边界(一个较高,另一个较低)的数据集。我想分析我相对于这些边界的观察结果:查看有多少观察结果 (1) 高于两个边界,(2) 位于两个边界之间,以及 (3) 低于两个边界。

这是我的数据的简化版本。

data_line1 <- data.frame(line = "1", x = c(0, round(runif(18,0,10), 2), 10), y = round(runif(20,40,60), 2))
data_line2 <- data.frame(line = "2", x = c(0, round(runif(18,0,10), 2), 10), y = round(runif(20,0,39), 2))
data_dots <- data.frame(x = round(runif(200,0,10), 2), y = round(runif(100,0,60), 2))

plot <- ggplot()+
geom_line(data = data_line1, aes(x,y), color = "black")+
geom_line(data = data_line2, aes(x,y), color = "red")+
geom_point(data = data_dots, aes(x,y), color = "deepskyblue")

enter image description here

我很确定这个问题应该有一个优雅的解决方案,但是在开始尝试 R 之前我无法在纸上想出任何东西(我对 R 也比较陌生)。

最佳答案

对于data_dots中的每个点,您需要找出y值是否高于等效x值处的每条线。为此,您需要对构成每条线的点进行插值。我们可以使用approxfun来做到这一点:

data_dots$line1_value <- approxfun(data_line1$x, data_line1$y)(data_dots$x)
data_dots$line2_value <- approxfun(data_line2$x, data_line2$y)(data_dots$x)
data_dots$group <- with(data_dots, 1 + (y > line2_value) + (y > line1_value))

现在我们可以根据每个组是在每行上方还是下方给每个组一个适当的标签:

data_dots$group <- c('below', 'between', 'above')[data_dots$group]

为了展示这个作品,让我们根据它们的组绘制点:

ggplot(data = data_line1, aes(x, y)) +
geom_point(data = data_dots, aes(colour = group)) +
geom_line() +
geom_line(data = data_line2)

enter image description here

要获取每个组中的实际数字,我们可以简单地使用table:

table(data_dots$group)
#> above below between
#> 35 59 106

关于r - 计算两个弯曲边界之间的观测值数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76629299/

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