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

问题描述

我有以下两个数据集

'''

 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 插入 Value1 和 Value2(相对于百分比),那就太好了。

我希望你对这件事有知识和洞察力!感谢您花时间和考虑这个话题。

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

预期结果:

'''

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 的插值(因为这就是我感兴趣的全部内容)。

标签: rinterpolationlinear-interpolation

解决方案


您只能在一个范围内进行插值,而不是超出范围,所以这是一种方法:

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")

阴谋


推荐阅读