我有两个数据集,例如:
# 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
中缺失的值在上述结果中仍然缺失。