R 将数据线性插值到每 1 个单元中,其中 max(x) 是可变的并且不是整数

R Linear Interpolation of data into every 1 unit where max(x) is variable and is not a whole number

我有以下两个数据集

'''

 Percent <- c(0,30.4,99.6)
 Value1 <- c(100,80.4,70)
 Value2 <- c(0.04,0.06, 0.062)

 DF1 <- data.frame(Percent,Value1,Value2)

 Percent_A <- c(0,10,50.2,70,90.1,130.6,150,180.3)
 Value1_A <- c(100,90,88,70,60,62,62,58)
 Value2_A <- c(0.04,0.042,0.05,0.059,0.06,0.066,0.07,0.074)

 DF2 <- data.frame(Percent_A, Value1_A, Value2_A)

'''

我想对这些数据帧进行插值(实际上我有很多这样的数据帧,所以如果我能使用一种方法来处理所有数据帧,那将是理想的)。我对 R 中的插值有一些基本的了解,但 运行 遇到了几个问题。

  1. 我希望将这些数据帧插值到新的数据帧中,并为每个百分比值提供 y 值。这导致我出现问题有两个原因(1:数据帧有两个不同的最大(百分比)值;2:最大(百分比)值通常不是整数)。根据我对 R 知识的有限插值,approxfun 函数似乎很有用,但我不确定如何插值到每 1 个百分比单位,其中最大已知百分比值不是整数。

  2. 如果我可以同时为给定的 DF 插入值 1 和值 2(相对于百分比),那就太好了。

我希望您能提供有关此事的知识和见解!感谢您花时间考虑这个话题。

预期的结果当然很长(如果您想了解更多详情,请告诉我):

预期结果:

'''

DF1$Percent <- c(0:100) 
DF1$Value1 <- #interpolated values for percent= 1,2,3....99,100 
DF1$Value2 <- #interpolated values for percent= 1,2,3....99,100

DF2$Percent_A <- c(0:180) 
DF2$Value1_A <- #interpolated values for percent= 1,2,3....99,180 
DF2$Value2_A <- #interpolated values for percent= 1,2,3....99,180

'''

注意:然后我将过滤 DF2,以便仅显示百分比 = 1-100 的内插值(因为这是我感兴趣的全部)。

您只能在一个范围内进行插值,不能超出它,所以这里有一个方法:

Pct1 <- with(DF1, ceiling(min(Percent)):floor(max(Percent)))
DF1.I1 <- with(DF1, approx(Percent, Value1, xout=Pct1))
DF1.I2 <- with(DF1, approx(Percent, Value2, xout=Pct1))
DF1.interp <- data.frame(Percent=Pct1, Value1=DF1.I1$y, Value2=DF1.I2$y)

DF1$Percent 的最大值为 99.6,因此您不能插值到 100。

Pct2 <- with(DF2, ceiling(min(Percent_A)):floor(max(Percent_A)))
DF2.I1 <- with(DF2, approx(Percent_A, Value1_A, xout=Pct2))
DF2.I2 <- with(DF2, approx(Percent_A, Value2_A, xout=Pct2))
DF2.interp <- data.frame(Percent_A=Pct2, Value1_A=DF2.I1$y, Value2_A=DF2.I2$y)

现在值 1 的地块:

dev.new(width=10, height=6)
par(mfrow=c(1, 2))
plot(Value1~Percent, DF1.interp, type="l")
plot(Value1_A~Percent_A, DF2.interp, type="l")