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

时间:2016-05-25 13:38:50

标签: r interpolation

我是R的新手并寻求关于如何在两个数据表之间进行插值并在新列中将结果打印到“table1”的建议

表1:

pexpect

表2:

   > (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

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

所以我一直想做的是:

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

那里有谁可以帮助我?

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

  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

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

2 个答案:

答案 0 :(得分:0)

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

  1. BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream())); String s = null; while ((s = stdInput.readLine()) != null) { System.out.println(s); } 更改为xout(如果我理解您的问题)
  2. 使用Table1$WindSpeed
  3. 从约会输出中提取y值

    所以:

    $y

答案 1 :(得分:0)

以下是使用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开发一个合适的模型而不是插值可能会更好。