如何将df中的变量值与另一个值相关联

时间:2016-08-01 13:54:38

标签: r dataframe

我有一个包含三个值的数据框,x和y是坐标,z是独立变量的值:

x.range <- c(1,10)
y.range <- c(20,50)
grid <- expand.grid(x = seq(x.range[1], x.range[2], by=0.5), 
                       y = seq(y.range[1], y.range[2], by=0.5))
grid$z <- runif(nrow(grid),10, 70)

现在我有另一个这样的数据帧只有x和y值:

x1 <- c(3.7,5.4,9.2)
y1 <- c(41.1,30.3,22.9)
df <- data.frame(x=x1,y=y1)

现在,我想将数据帧df的最近点(最短距离)的z值与数据帧grid的点相关联。感谢。

1 个答案:

答案 0 :(得分:1)

这不是最漂亮的,但有效

apply(df, 1, 
      function(x){
        pythag <- sqrt((x[1] - grid$x)^2 + 
                       (x[2] - grid$y)^2)
        grid[which.min(pythag), "z"]
      })

只需使用Pythagoras返回最近点的值。

修改

重新编码以遵守编码标准:

pythag <- function(x, y, g){
  which.min(((x - g$x)^2 + (y - g$y)^2)^0.5)
}

idx <- mapply(FUN = pythag,
              x = df[["x"]], 
              y = df[["y"]], 
              MoreArgs = list(g = grid))

grid[idx,]