2016-05-25 17 views
1

我是新來的R和尋求如何兩個數據表之間插入一些建議和打印結果在一個新列「表1」兩個數據的R直線插補設置

表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 

現在我想借此表1 $風速值,其中方向==「ENE」和表2 $ Wind.speed值之間插值來打印插值表2 $輸出值轉換爲新的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 

人在那裏誰可以幫幫我嗎?

好一點點更新: 我早點起牀的的answere是真正有用的,但我想找到表2給出$輸出之間的值,例如用於

windspeed= 7,68 

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

我因此不能使用「恆定」由於我的輸出數據不是線性的,我不能使用「線性」......這裏的任何幫助? :)

+0

將模型擬合到Table2中的數據並使用此模型來預測Table1會更好嗎?但是,如果你仍然想插入,你應該使用'approxfun'。 – Roland

+0

你可能會糾正,近似dosnt工作,因爲我的目標是給定輸出值與非線性數據之間的輸出值。我有更新這個問題,你是否介意進一步解釋你的想法? :) –

回答

0

只是有兩個代碼的小錯誤:

  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 
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而不是插值。