繁体   English   中英

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

[英]R Linear interpolation between two data sets

我是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

表2:

> (Table2 <- read.delim("~/R/Table2.txt")[-1,])
   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

现在我想取Table1 $ WindSpeed值,其中Direction ==“ENE”并在Table2 $ Wind.speed值之间进行插值,以将插值的Table2 $ Output值打印到一个新列Table1 $ Output中。

所以我一直在努力做的是:

(Table1 <-
  transform(
    Table1, Output =
      ifelse(
        Direction == "ENE",
        approx(
          Table2$Wind.speed,Table2$Output,xout=Table1$Output, method = "constant"), "Næsta átt")
  )
)

但有些事情是错的,我得到:

  WindSpeed Degrees Direction                             Output
1      7.68    58.9       ENE          1, 1, 1, 1, 1, 1, 1, 1, 1
2      5.09    63.2       ENE NA, NA, NA, NA, NA, NA, NA, NA, NA
3      7.56    72.2       ENE          1, 1, 1, 1, 1, 1, 1, 1, 1
4      8.39    73.8       ENE NA, NA, NA, NA, NA, NA, NA, NA, NA
5      7.34    73.1       ENE          1, 1, 1, 1, 1, 1, 1, 1, 1
6      7.83    74.9       ENE NA, NA, NA, NA, NA, NA, NA, NA, NA
7      8.42    73.8       ENE          1, 1, 1, 1, 1, 1, 1, 1, 1
8      7.70    85.5         E                          Næsta átt
9      2.58    75.6         E                          Næsta átt

有谁可以帮助我吗?

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

windspeed= 7,68 

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

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

您的代码中只有两个小错误:

  1. 更改xoutTable1$WindSpeed (如果我正确地理解你的问题)
  2. 使用$y从约会输出中提取y值

所以:

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

这是一个使用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

但是,为Output而不是插值开发适当的模型可能更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM