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 中的插值有一些基本的了解,但 运行 遇到了几个问题。
我希望将这些数据帧插值到新的数据帧中,并为每个百分比值提供 y 值。这导致我出现问题有两个原因(1:数据帧有两个不同的最大(百分比)值;2:最大(百分比)值通常不是整数)。根据我对 R 知识的有限插值,approxfun 函数似乎很有用,但我不确定如何插值到每 1 个百分比单位,其中最大已知百分比值不是整数。
如果我可以同时为给定的 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")
我有以下两个数据集
'''
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 中的插值有一些基本的了解,但 运行 遇到了几个问题。
我希望将这些数据帧插值到新的数据帧中,并为每个百分比值提供 y 值。这导致我出现问题有两个原因(1:数据帧有两个不同的最大(百分比)值;2:最大(百分比)值通常不是整数)。根据我对 R 知识的有限插值,approxfun 函数似乎很有用,但我不确定如何插值到每 1 个百分比单位,其中最大已知百分比值不是整数。
如果我可以同时为给定的 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")