我有每个公交车站代码的以下数据框,哪些线路在那里停靠以及每个站点的坐标:
code line latitude longitude
C0002 10 -31.46496 -64.07821
C0002 12 -31.46496 -64.07821
C0002 16 -31.46496 -64.07821
C0002 19 -31.46496 -64.07821
C0003 10 -31.46497 -64.08067
C0003 12 -31.46497 -64.08067
C0003 18 -31.46497 -64.08067
C0004 10 -31.46495 -64.08214
C0004 12 -31.46495 -64.08214
C0004 16 -31.46495 -64.08214
C0004 18 -31.46495 -64.08214
C0005 10 -31.46497 -64.08417
C0005 16 -31.46497 -64.08417
C0005 18 -31.46497 -64.08417
C0006 12 -31.46482 -64.08665
C0006 16 -31.46482 -64.08665
C0006 18 -31.46482 -64.08665
C0006 19 -31.46482 -64.08665
我已经使用以下代码将此数据帧转换为 sf 对象:
df <- st_as_sf(df, coords = c("latitude", "longitude"), crs = 4326)
df <- st_transform(df, crs="+proj=tmerc +lat_0=-34.6297166 +lon_0=-58.4627 +k=1 +x_0=100000 +y_0=100000 +ellps=intl +units=m +no_defs")
对于数据框的每一行(即每行的每个代码),我想执行以下操作:
1-) 使用 st_distance()
函数来确定哪个是同一条线路的最近站点
2-) 将代码和同一行最近停靠点的距离添加到两个新列中。但考虑到这一点:
a-) 如果最近的停靠点与我之前已经计算的相同,则计算
第二个最近。例如:对于 10 号线,如果离 C0002 站点最近的站点是
C0003 停止,然后在第一行的“closest_stop”列中写入 C0003 并写入 >the
“distance_to_closest”列中 C0002 和 C0003 之间的距离(以米为单位)。但是 > 那么,
如果离 C0003 停靠点最近的停靠点也恰好是 C0002 停靠点,则在
相应的行(第 5 行)不写 C0002,而是第二个最接近 C0003 的停止,比如 >for
示例 C0004,并在“distance_to_closest”列中写入距离(以 mts 为单位)
C0003 和 C0004 之间。
b-) 当我们到达最后一站时(我会知道,因为所有最近的站
停止将已经被计算)。我想要“closes_stop”>列中的“结束”这个词
以及“distance_to_closest”列中方便的那个:NA, 9999999, "End",
随便。
因此,我需要一个如下所示的数据框:
code line latitude longitude closest_stop distance_to_closest
C0002 10 -31.46496 -64.07821 C0003 xxxx (in mts)
C0002 12 -31.46496 -64.07821 C0003 xxxx (in mts)
C0002 16 -31.46496 -64.07821 C0004 xxxx (in mts)
C0002 19 -31.46496 -64.07821 C0006 xxxx (in mts)
C0003 10 -31.46497 -64.08067 C0004 xxxx (in mts)
C0003 12 -31.46497 -64.08067 C0004 xxxx (in mts)
C0003 18 -31.46497 -64.08067 C0004 xxxx (in mts)
C0004 10 -31.46495 -64.08214 C0005 xxxx (in mts)
C0004 12 -31.46495 -64.08214 C0006 xxxx (in mts)
C0004 16 -31.46495 -64.08214 C0006 xxxx (in mts)
C0004 18 -31.46495 -64.08214 C0005 xxxx (in mts)
C0005 10 -31.46497 -64.08417 End NA
C0005 16 -31.46497 -64.08417 C0006 xxxx (in mts)
C0005 18 -31.46497 -64.08417 C0006 xxxx (in mts)
C0006 12 -31.46482 -64.08665 End NA
C0006 16 -31.46482 -64.08665 End NA
C0006 18 -31.46482 -64.08665 End NA
C0006 19 -31.46482 -64.08665 End NA