基于R中查找表的线性插值(Finding the Age Lower bound and Upper bound)



我有两个数据集,例如:

# First data:
Age<-c(2,2.1,2.2,3.4,3.5,4.2,4.7,4.8,5,5.6,NA, 5.9, NA)
df1<-data.frame(Age)
# Second data:
Age2<-seq(2,20,0.25)    
Mspline<-rnorm(73)
df2<-data.frame(Age2, Mspline)

对于第一个数据集中的每个年龄值,我需要通过以下公式在第二个数据集中找到Mspline(线性插值(的正确值:

假设你在第一个数据集中的年龄是4.8,那么这个年龄的下限和上限是4.75和5(这是Age2中最接近的两个值(。那么,这个年龄的Mspline的值将是:*

Age2      Mspline     Sspline 
4.75    -0.0769      0.1592 
5       -0.0752      0.1535 
Mspline = -0.0769 + ((4.8-4.75)/0.25)·(-0.0752 - (-0.0769)) = -0.0766
Mspline at your age= Mspline of lower bound of age+ ((your age-lower bound age)/0.25)*(Mspline of lower bound of age)-(Mspline of upper bound of age)

我想知道怎样在R中生成这个函数?

下面是一个函数,它实现了我所理解的公式:

Age<-c(2,2.1,2.2,3.4,3.5,4.2,4.7,4.8,5,5.6,NA, 5.9, NA)
# Second data:
Age2<-seq(2,20,0.25)    
Mspline<-rnorm(73)
res <- lapply(1:length(Age), (x){
lwr_ind <- max(which(Age2 <= Age[x]))
upr_ind <- min(which(Age2 >= Age[x]))
data.frame(Age = Age[x], 
Mspline = Mspline[lwr_ind] + ((Age[x]-Age2[lwr_ind])/0.25)*(Mspline[lwr_ind] - Mspline[upr_ind]))
})
res <- do.call(rbind, res)
res
#>    Age     Mspline
#> 1  2.0 -0.48510574
#> 2  2.1 -0.45222184
#> 3  2.2 -0.41933793
#> 4  3.4 -1.05075284
#> 5  3.5  1.03415440
#> 6  4.2  0.90388824
#> 7  4.7  1.05441685
#> 8  4.8 -1.86696649
#> 9  5.0 -0.60582730
#> 10 5.6 -0.76802820
#> 11  NA          NA
#> 12 5.9  0.09647946
#> 13  NA          NA

创建于2022-10-19由reprex包(v2.0.1(

剩下的问题是,您是否正在尝试使用缺失的值(NA(。Age中缺失的值在上述结果中仍然缺失。

相关内容

  • 没有找到相关文章

最新更新