2015-05-25 72 views
3

我有兩個數據幀:參考插值。這是參考窺():使用2D中的數據幀插入數據幀中的數據R

$ Value (dbl) 62049.67, 62040.96, 62053.02, 62039.31, 62020.82, 62001.73,... 
$ X  (dbl) -10.14236, -10.14236, -10.14236, -10.14236, -10.14236, -10.... 
$ Y  (dbl) -12.68236, -12.64708, -12.61181, -12.57653, -12.54125, -12.... 

這是插值

$ X  (dbl) -10.1346, -10.0838, -10.0330, -9.9822, -9.9314, -9.8806, -9... 
$ Y  (dbl) -12.6746, -12.6746, -12.6746, -12.6746, -12.6746, -12.6746,... 

欲獲得可變價值使用從2D內插插值參考文獻

我在想採用雙三次()函數阿克瑪包,像bicubic(Reference$X, Reference$Y, Reference$Value, Interpolated$X, Interpolated$Y)。然而,bicubic()需要中的矩陣參考$值

是否有任何簡單的方法來插入二維與數據幀中的數據,最好使用dplyr

回答

0

不知道你是否收到過這個答案。我正在尋找同樣的東西,並且必須創建我自己的功能來做到這一點。請看下面:

interpolate <- function(x, x1, x2, y1, y2) { 
    # Interpolates between two points. 
    # 
    # Args: 
    # x: Corresponding x value of y value to return. 
    # x1: Low x-value. 
    # x2: High x-value. 
    # y1: Low y-value. 
    # y2: High y-value. 
    # 
    # Returns: 
    # Interpolated value corresponding to x between the two points. 
    y <- y1 + (y2-y1)*(x-x1)/(x2-x1) 
    return(y) 
} 

doubleinterpolate <- function(x, y, z, xout, yout) { 
    # Returns a double interpolated value among three vectors with two 
    # values in two of the vectors. 
    # 
    # Args: 
    # x: Vector containing a known value. 
    # y: Vector containing a known value. 
    # z: Vector containing an unknown value. 
    # xout: Known value in x-vector. 
    # yout: Known value in y-vector. 
    # 
    # Returns: 
    # Double interpolated value in z of the points xout and yout. 

    # Determine adjacent values in the table 
    x_low <- max(x[x < xout]) 
    x_high <- min(x[x > xout]) 
    y_low <- max(y[y < yout]) 
    y_high <- min(y[y > yout]) 

    # Create df and subset 
    df <- data_frame(x = x, y = y, z = z) 
    df_low <- df[x == x_low, ] 
    df_high <- df[x == x_high, ] 

    # Interpolate low x-values 
    yint1 <- as.numeric(spline(df_low$y, df_low$z, xout = yout)[2]) 
    yint2 <- as.numeric(spline(df_high$y, df_high$z, xout = yout)[2]) 

    #Interpolate to get last value 
    zout <- interpolate(xout, x_low, x_high, yint1, yint2) 

    return(zout) 
}