R:对于相同的x,对于上升和下降的肢体插值y

时间:2018-04-02 18:32:12

标签: 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)) + min(x,na.rm = T)
} 

但是!当我使用approx函数时,它只返回一个y值(对于上升的肢体)。如何获得第二个(下肢)?也许还有其他功能可以做到这一点?

> approx(x, y, xout = mid(x))
$x
[1] 2.05

$y
[1] 634.6364

换句话说,我正在尝试这样做:[Lawler et al。,2006]的图形示例是here

1 个答案:

答案 0 :(得分:1)

由于数据不规则(它与“正确”功能不对应),您将不得不自己找到所有交叉点。我认为你可以用

之类的东西做到这一点
target <- mid(x)
idx <- which(abs(diff(sign(x-target)))>0)

找到感兴趣的x值每一侧的所有点对,然后你可以为每个点提取y值

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)

enter image description here