两个数据集之间的R线性插值

两个数据集之间的R线性插值,r,interpolation,R,Interpolation,我是R新手,我想知道如何在两个数据表之间进行插值,并将结果打印到“table1”的新列中 表1: > (Table1 <- read.csv2("~/R/Table1.txt",sep="")) WindSpeed Degrees Direction 1 7.68 58.9 ENE 2 5.09 63.2 ENE 3 7.56 72.2 ENE 4 8.39 73.8

我是R新手,我想知道如何在两个数据表之间进行插值,并将结果打印到“table1”的新列中

表1:

   > (Table1 <- read.csv2("~/R/Table1.txt",sep=""))
  WindSpeed Degrees Direction
1      7.68    58.9       ENE
2      5.09    63.2       ENE
3      7.56    72.2       ENE
4      8.39    73.8       ENE
5      7.34    73.1       ENE
6      7.83    74.9       ENE
7      8.42    73.8       ENE
8      7.70    85.5         E
9      2.58    75.6         E
有人能帮我吗

好的,有一点更新: 我之前得到的Answare非常有用,但我想找到给定Table2$Output之间的值,例如

windspeed= 7,68 

    > 66.301+(96.087-66.301)*(7.68-7.5)/(8.5-7.5)
    # [1] 71.66248

因此,我不能使用“常量”,因为我的输出数据不是线性的,所以我不能使用“线性”。。。有什么帮助吗?:)

代码中只有两个小错误:

  • xout
    更改为
    Table1$WindSpeed
    (如果我正确理解了您的问题)
  • 使用
    $y
  • 因此:

    表1表1
    风速度方向输出
    1 7.68 58.9 ENE 66.301
    2 5.09 63.2 ENE 13.747
    3 7.56 72.2 ENE 66.301
    4 8.39 73.8 ENE 66.301
    5 7.34 73.1 ENE 42.939
    6 7.83 74.9 ENE 66.301
    7 8.42 73.8 ENE 66.301
    8 7.70 85.5 E Næstaátt
    9 2.58 75.6恩斯塔特东部
    
    您的代码中只有两个小错误:

  • xout
    更改为
    Table1$WindSpeed
    (如果我正确理解了您的问题)
  • 使用
    $y
  • 因此:

    表1表1
    风速度方向输出
    1 7.68 58.9 ENE 66.301
    2 5.09 63.2 ENE 13.747
    3 7.56 72.2 ENE 66.301
    4 8.39 73.8 ENE 66.301
    5 7.34 73.1 ENE 42.939
    6 7.83 74.9 ENE 66.301
    7 8.42 73.8 ENE 66.301
    8 7.70 85.5 E Næstaátt
    9 2.58 75.6恩斯塔特东部
    
    下面是一个使用
    approxfun
    的解决方案:

    DF1 <- read.table(text = "   Wind.speed    Output
                     2         0,5      0
                     3         1,5      0
                     4         2,5  1.540
                     5         3,5  5.938
                     6         4,5 13.747
                     7         5,5 25.740
                     8         6,5 42.939
                     9         7,5 66.301
                     10        8,5 96.087")
    DF1$Wind.speed <- as.numeric(gsub(",", ".", DF1$Wind.speed, fixed = TRUE))
    
    
    fun <- approxfun(DF1$Wind.speed, DF1$Output)
    fun(7.68)
    #[1] 71.66248
    
    DF2 <- read.table(text = "  WindSpeed Degrees Direction
                      1      7.68    58.9       ENE
                      2      5.09    63.2       ENE
                      3      7.56    72.2       ENE
                      4      8.39    73.8       ENE
                      5      7.34    73.1       ENE
                      6      7.83    74.9       ENE
                      7      8.42    73.8       ENE
                      8      7.70    85.5         E
                      9      2.58    75.6         E")
    
    DF2$Output <- NA
    DF2[DF2$Direction == "ENE", "Output"] <- fun(DF2[DF2$Direction == "ENE", "WindSpeed"])
    #  WindSpeed Degrees Direction   Output
    #1      7.68    58.9       ENE 71.66248
    #2      5.09    63.2       ENE 20.82287
    #3      7.56    72.2       ENE 68.08816
    #4      8.39    73.8       ENE 92.81054
    #5      7.34    73.1       ENE 62.56308
    #6      7.83    74.9       ENE 76.13038
    #7      8.42    73.8       ENE 93.70412
    #8      7.70    85.5         E       NA
    #9      2.58    75.6         E       NA
    

    DF1这里有一个使用
    approxfun
    的解决方案:

    DF1 <- read.table(text = "   Wind.speed    Output
                     2         0,5      0
                     3         1,5      0
                     4         2,5  1.540
                     5         3,5  5.938
                     6         4,5 13.747
                     7         5,5 25.740
                     8         6,5 42.939
                     9         7,5 66.301
                     10        8,5 96.087")
    DF1$Wind.speed <- as.numeric(gsub(",", ".", DF1$Wind.speed, fixed = TRUE))
    
    
    fun <- approxfun(DF1$Wind.speed, DF1$Output)
    fun(7.68)
    #[1] 71.66248
    
    DF2 <- read.table(text = "  WindSpeed Degrees Direction
                      1      7.68    58.9       ENE
                      2      5.09    63.2       ENE
                      3      7.56    72.2       ENE
                      4      8.39    73.8       ENE
                      5      7.34    73.1       ENE
                      6      7.83    74.9       ENE
                      7      8.42    73.8       ENE
                      8      7.70    85.5         E
                      9      2.58    75.6         E")
    
    DF2$Output <- NA
    DF2[DF2$Direction == "ENE", "Output"] <- fun(DF2[DF2$Direction == "ENE", "WindSpeed"])
    #  WindSpeed Degrees Direction   Output
    #1      7.68    58.9       ENE 71.66248
    #2      5.09    63.2       ENE 20.82287
    #3      7.56    72.2       ENE 68.08816
    #4      8.39    73.8       ENE 92.81054
    #5      7.34    73.1       ENE 62.56308
    #6      7.83    74.9       ENE 76.13038
    #7      8.42    73.8       ENE 93.70412
    #8      7.70    85.5         E       NA
    #9      2.58    75.6         E       NA
    

    DF1将模型与表2中的数据相匹配,并使用此模型对表1进行预测不是更好吗?然而,如果你仍然想插值,你可能应该使用
    approxfun
    。你可能是正确的,因为我的目标是在非线性数据的给定输出值之间的输出值。我更新了这个问题,你介意进一步解释一下你对解决方案的想法吗?:)将模型与表2中的数据相匹配并使用此模型预测表1中的数据不是更好吗?然而,如果你仍然想插值,你可能应该使用
    approxfun
    。你可能是正确的,因为我的目标是在非线性数据的给定输出值之间的输出值。我更新了这个问题,你介意进一步解释一下你对解决方案的想法吗?:)
    windspeed= 7,68 
    
        > 66.301+(96.087-66.301)*(7.68-7.5)/(8.5-7.5)
        # [1] 71.66248
    
    Table1 <-
      transform(
        Table1, Output =
          ifelse(
            Direction == "ENE",
            approx(
              Table2$Wind.speed, Table2$Output, xout = Table1$WindSpeed, method = "constant")$y, "Næsta átt")
      )
    
    > Table1
      WindSpeed Degrees Direction    Output
    1      7.68    58.9       ENE    66.301
    2      5.09    63.2       ENE    13.747
    3      7.56    72.2       ENE    66.301
    4      8.39    73.8       ENE    66.301
    5      7.34    73.1       ENE    42.939
    6      7.83    74.9       ENE    66.301
    7      8.42    73.8       ENE    66.301
    8      7.70    85.5         E Næsta átt
    9      2.58    75.6         E Næsta átt
    
    DF1 <- read.table(text = "   Wind.speed    Output
                     2         0,5      0
                     3         1,5      0
                     4         2,5  1.540
                     5         3,5  5.938
                     6         4,5 13.747
                     7         5,5 25.740
                     8         6,5 42.939
                     9         7,5 66.301
                     10        8,5 96.087")
    DF1$Wind.speed <- as.numeric(gsub(",", ".", DF1$Wind.speed, fixed = TRUE))
    
    
    fun <- approxfun(DF1$Wind.speed, DF1$Output)
    fun(7.68)
    #[1] 71.66248
    
    DF2 <- read.table(text = "  WindSpeed Degrees Direction
                      1      7.68    58.9       ENE
                      2      5.09    63.2       ENE
                      3      7.56    72.2       ENE
                      4      8.39    73.8       ENE
                      5      7.34    73.1       ENE
                      6      7.83    74.9       ENE
                      7      8.42    73.8       ENE
                      8      7.70    85.5         E
                      9      2.58    75.6         E")
    
    DF2$Output <- NA
    DF2[DF2$Direction == "ENE", "Output"] <- fun(DF2[DF2$Direction == "ENE", "WindSpeed"])
    #  WindSpeed Degrees Direction   Output
    #1      7.68    58.9       ENE 71.66248
    #2      5.09    63.2       ENE 20.82287
    #3      7.56    72.2       ENE 68.08816
    #4      8.39    73.8       ENE 92.81054
    #5      7.34    73.1       ENE 62.56308
    #6      7.83    74.9       ENE 76.13038
    #7      8.42    73.8       ENE 93.70412
    #8      7.70    85.5         E       NA
    #9      2.58    75.6         E       NA