我有一个包含三个值的数据框,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
的点相关联。感谢。
答案 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,]