R:为相同x的上升和下降肢体插入y

R:为相同x的上升和下降肢体插入y,r,interpolation,R,Interpolation,我得到一个x,y数据,它是一个顺时针循环。在R中,我想确定中点x值(Xmid),然后为相同的Xmid在两个肢体上插入y值 x <- c(1.62, 1.82,2.09, 2.48, 2.19, 1.87, 1.67) y <- c(238, 388, 721, 744, 307, 246, 222) plot(x, y, type = 'l') mid <- function(x){ 0.5*(max(x, na.rm = T) - min(x, na.rm = T))

我得到一个x,y数据,它是一个顺时针循环。在R中,我想确定中点x值(
Xmid
),然后为相同的
Xmid
在两个肢体上插入y值

x <- c(1.62, 1.82,2.09, 2.48, 2.19, 1.87, 1.67)
y <- c(238, 388, 721, 744, 307, 246, 222)

plot(x, y, type = 'l')

mid <- function(x){
  0.5*(max(x, na.rm = T) - min(x, na.rm = T)) + min(x,na.rm = T)
} 

换句话说,我正在尝试这样做:【Lawler et al.,2006】中的一个图形示例是

,因为数据不是规则的(它不符合“适当”的函数),所以您必须自己找到所有的交点。我想你可以用这样的东西

target <- mid(x)
idx <- which(abs(diff(sign(x-target)))>0)

approx()
仅对来自正确数学“函数”的数据有效。您绘制的不是函数,因为函数需要通过。基于MrFlick的注释,您可以通过将向量分成两个单独的部分(至少在示例中)并在每个段上使用
approx
。谢谢,但我没有必要使用
approx()
函数。可能存在另一种获取该值的方法?我不想打断以分离向量,因为我的数据集有点复杂。非常感谢。这很有帮助。顺便问一下,为什么在
f
函数的末尾使用
$y
?因为近似值返回一个包含x和y值的列表,而我们只需要y值。
target <- mid(x)
idx <- which(abs(diff(sign(x-target)))>0)
f <- function(i, target) approx(c(x[i], x[i+1]), c(y[i], y[i+1]), xout=target)$y
yp <- sapply(idx, f, target=target)
abline(v=target, lty=2)
points(rep(target, length(yp)), yp, col="red", cex=2)