r - 如何在R中用y插值向量
问题描述
我有一个带坐标的向量
x <- c(1, 3, 5, 7)
y <- c(2.6, 7.3, 6.8, 1.9)
我需要同时对向量 (x, y) 进行x
插值y
。x
我能做到
approxfun(x, y)(1:7)
但是如何插值y
?我需要获得n = floor(abs(y1 - y2))
相邻y1
和之间的点y2
。
解决方案
您可以使用purrr::pmap
组合 with在和dplyr::lag
之间进行插值。
对于两点之间的线性插值,将间隔削减或并不重要,因此仍然有效:x[i-1]
x[i]
x
y
approxfun(x, y)
library(dplyr)
library(purrr)
x <- c(1, 3, 5, 7)
y <- c(2.6, 7.3, 6.8, 1.9)
df <- data.frame(x=x,y=y)
df %>% mutate(xprev = lag(x),yprev=lag(y)) %>%
purrr::pmap(~with(list(...),{
if (is.na(xprev)) {
data.frame(x=x,y=y)
} else {
n <- floor(abs(yprev-y)) + 2
if (n>0) {
xstep <- (x-xprev) / n
xsteps <- seq(xprev+xstep,x ,by = xstep )
data.frame(x=xsteps, y=approxfun(c(xprev,x),c(yprev,y))(xsteps))
}
}
})) %>% bind_rows
#> x y
#> 1 1.0 2.600
#> 2 1.5 3.775
#> 3 2.0 4.950
#> 4 2.5 6.125
#> 5 3.0 7.300
#> 6 5.5 5.575
#> 7 6.0 4.350
#> 8 6.5 3.125
#> 9 7.0 1.900
推荐阅读
- r - 在 R 中执行 Postgres 函数
- python - DataFrame.where,使用数组作为条件时出错
- python - 我有一个包含 130 个变量的数据集,我必须检查所有变量的相关性,有什么方法可以检查一次
- ios - 观察 NSManagedObject 变量上的 didSet
- flutter - 将 Flutter 动画场景编码为视频文件
- html - 如何防止孩子在flexbox中超出其父宽度?
- excel - 输出字符串文本数组,但在代码字典数组中我有两个具有相同字母的字符串
- javascript - 错误类型错误:无法读取未定义的属性“替换”
- python - 在有向图中查找结束节点
- android - 当有一个带按钮的 RecyclerView 时,SetFocus 无法使用硬件键盘处理 Activity 的 EditText