我有两组坐标(base和amp; target)作为两个数据帧。
base.df <- data.frame(cbind(LONG = c(-73.94006,-73.95616,-73.86548,-73.99118,-73.99801,
-73.96208,-73.95544,-74.09251,-73.94317,-73.98913),
LAT = c(0.78963,40.65378,40.83767,40.75533,40.74759,
40.71327,40.81450,40.62554,40.83660,40.57415)))
target.df <- data.frame(cbind(long = c(-74.00754,-74.01252,-74.00525,-74.00594,-74.00668,-73.99290),
lat = c(40.70347,40.71007,40.71005,40.71546,40.71976,40.71521)))
我的目标是获取基础数据帧的每一行并使用spDistsN1()
来获得该行(基数)与目标数据帧的每一行之间的不同距离。在我想要最远距离的许多距离中(使用min()
?)并将最短距离附加到新矢量。完成后,我应该只有10个数据点,我可以cbind()
支持基础数据帧。我知道apply()
可能有用,但我对使用它或在R中编写函数并不是很熟悉,有人可以帮忙吗?
答案 0 :(得分:0)
这是处理任务的一种方法。由于您需要spDistsN1()
的矩阵,我将两个数据帧都转换为矩阵对象。在lapply()
我计算了base.df
中每一行与target.df
中所有行之间的距离。这会创建十个列表。每个列表代表base.df
中的每一行。你想要做的是在每个列表中寻找一个最小值,你可以用另一个lapply()
来做。最后,我使用out
将结果base.df
添加到bind_cols()
。
library(sp)
library(dplyr)
library(purrr)
base.mtx <- as.matrix(base.df)
target.mtx <- as.matrix(target.df)
lapply(1:nrow(base.df), function(x){
spDistsN1(pts = target.mtx, pt = base.mtx[x, ])}) %>%
lapply(min) %>%
unlist %>%
bind_cols(base.df, out = .)
LONG LAT out
1 -73.94006 0.78963 39.91389704
2 -73.95616 40.65378 0.07147727
3 -73.86548 40.83767 0.17672665
4 -73.99118 40.75533 0.03880045
5 -73.99801 40.74759 0.02914923
6 -73.96208 40.71327 0.03088100
7 -73.95544 40.81450 0.10612142
8 -74.09251 40.62554 0.11529521
9 -73.94317 40.83660 0.13118157
10 -73.98913 40.57415 0.13062385