approx()用于具有线性插值的查找表的基本用途

  • 本文关键字:查找 插值 用于 线性 approx r
  • 更新时间 :
  • 英文 :


我有一个向量my_points和一个描述点和值之间几乎线性关系的数据帧。

如何使用线性插值从数据帧和my_points中描述的关系中获得向量my_values

假设超过数据帧中最后一点的关系保持线性。

my_points <- c(4400, 8800, 13200, 37600, 42000, 46400, 50800, 55200, 59600, 
64000, 68400, 72800, 77200, 81600, 86000, 90400, 94800, 99200, 
103600, 108000, 112400, 116800, 121200, 125600)

df <- structure(list(points = c(3000, 4500, 7500, 11000, 14500, 21500, 
43000, 71500), values = c(20, 30, 50, 75, 100, 150, 300, 500), 
points_per_value = c(150, 150, 150, 146.666666666667, 145, 
143.333333333333, 143.333333333333, 143)), row.names = c(NA, 
                             -8L), class = c("tbl_df", "tbl", "data.frame"))

你说"插值">,在这种情况下你可以得到:

cbind(
data.frame(my_points),
lapply(df[-1], function(z) approx(df$points, z, xout = my_points)$y)
)
#    my_points    values points_per_value
# 1       4400  29.33333         150.0000
# 2       8800  59.28571         148.7619
# 3      13200  90.71429         145.6190
# 4      37600 262.32558         143.3333
# 5      42000 293.02326         143.3333
# 6      46400 323.85965         143.2936
# 7      50800 354.73684         143.2421
# 8      55200 385.61404         143.1906
# 9      59600 416.49123         143.1392
# 10     64000 447.36842         143.0877
# 11     68400 478.24561         143.0363
# 12     72800        NA               NA
# 13     77200        NA               NA
# 14     81600        NA               NA
# 15     86000        NA               NA
# 16     90400        NA               NA
# 17     94800        NA               NA
# 18     99200        NA               NA
# 19    103600        NA               NA
# 20    108000        NA               NA
# 21    112400        NA               NA
# 22    116800        NA               NA
# 23    121200        NA               NA
# 24    125600        NA               NA

但你也说过";超过最后一点",暗示您想要"外推法">

cbind(
data.frame(my_points), lapply(df[-1], function(z) 
Hmisc::approxExtrap(df$points, z, xout = my_points)$y)
)
#    my_points    values points_per_value
# 1       4400  29.33333         150.0000
# 2       8800  59.28571         148.7619
# 3      13200  90.71429         145.6190
# 4      37600 262.32558         143.3333
# 5      42000 293.02326         143.3333
# 6      46400 323.85965         143.2936
# 7      50800 354.73684         143.2421
# 8      55200 385.61404         143.1906
# 9      59600 416.49123         143.1392
# 10     64000 447.36842         143.0877
# 11     68400 478.24561         143.0363
# 12     72800 509.12281         142.9848
# 13     77200 540.00000         142.9333
# 14     81600 570.87719         142.8819
# 15     86000 601.75439         142.8304
# 16     90400 632.63158         142.7789
# 17     94800 663.50877         142.7275
# 18     99200 694.38596         142.6760
# 19    103600 725.26316         142.6246
# 20    108000 756.14035         142.5731
# 21    112400 787.01754         142.5216
# 22    116800 817.89474         142.4702
# 23    121200 848.77193         142.4187
# 24    125600 879.64912         142.3673

如果你只需要其中一列的矢量,那么

Hmisc::approxExtrap(df$points, df$my_values, xout = my_points)$y

最新更新