R:为相同x的上升和下降肢体插入y
我得到一个x,y数据,它是一个顺时针循环。在R中,我想确定中点x值(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))
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)