我对这个看似简单的任务感到绝望:我有一个数字向量values
和一个时间向量time
,我需要找出这些值在一定范围内的时间。以下是一些数据:
df <- data.frame(time= c(1,3:10), values= c(7,3:10))
字符串
对于该数据,4.5小时的数值超出了3.5 - 6.5的范围。以下是如何确定这4.5小时的可视化:
x1c 0d1x的数据
在该图中,x轴是时间,y轴是值,点是真实的测量值,虚线是范围边界3.5和6.5,实线只是帮助更好地查看范围边界何时被跨越。
我是否错过了一种明显的方法来确定值超出范围的时间?
该图是使用
threshold_low <- 3.5
threshold_high <- 6.5
ggplot(data= df, mapping= aes(time, values)) +
geom_point() +
geom_line() +
geom_hline(yintercept= c(threshold_low, threshold_high), linetype= "dashed") +
scale_x_continuous(breaks=seq(0, 10, 1)) +
scale_y_continuous(breaks=seq(0, 10, 1))
型
5条答案
按热度按时间prdp8dxp1#
如果您不想手动计算每个交叉点,一个更简单的方法是使用线性插值:
字符串
这导致
型
我们可以通过在现有图上绘制一个
geom_rect
来显示这些数字是正确的:型
的数据
values
在目标范围内的总时间量由下式给出:型
8zzbczxx2#
一个数学方法是
1.在点之间进行线性插值
1.找到零
1.如果两个连续零之间的点福尔斯限值,则计算这两个零之间的差值
1.全部差值求和
字符串
zqdjd7g93#
作为一行程序:
字符串
ecfdbz9o4#
灵感来自@AllanCameron的回答(谢谢!我提出以下简短的解决办法:
字符串
r3i60tvu5#
如注解中所建议的,如果您决定信任每对数据点之间的纯线性拟合,则只需计算线性拟合与最大或最小范围阈值的交点。这是一个基本的线性方程组。
$斜率=(y_2 -y_1)/(x_2 - x_1)$ hmmm... mathjax怎么了?
截距= y_2 -斜率 *x_2(或y_1,x_1;没关系)。
您不必测试每个段,只需测试其中一个点超出所需范围的那些段。如果两个点在同一方向上超出,则整个线段超出范围。