You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用dplyr实现条件突变:跨行匹配填充From列经纬度

基于To字段匹配From对应经纬度的解决方案

你有一个包含To和From字段的位置数据集,仅To字段对应Latitude(纬度)和Longitude(经度),模拟数据如下:

df <- data.frame(
  To = c(1,1,1,1,2,3,4,4,5,5,5,6,7,7,7,7,7,7,8,9,9),
  Latitude = c(37,37,37,37,35,34,38,38,39,39,39,31,30,30,30,30,30,30,32,33,33),
  Longitude = c(-75,-75,-75,-75,-75,-75,-75,-75,-74,-74,-74,-74,-74,-74,-74,-74,-74,-74,-74,-73,-73),
  From = c(1,1,1,2,2,3,4,5,5,5,4,5,6,6,6,7,7,7,8,9,1)
)

你尝试用if_else逐行匹配的方法只能处理From和当前行To相等的情况,无法全局匹配From对应的To的经纬度,这里提供两种可行的解决方法:

方法一:使用match直接匹配(简洁高效)

利用match函数找到每个From值在To列中的位置,直接提取对应经纬度:

library(dplyr)

df_processed <- df %>%
  mutate(
    From.Lat = Latitude[match(From, To)],
    From.Lon = Longitude[match(From, To)]
  )

因为你的数据中同一个To对应的经纬度完全一致,match会返回第一个匹配到的To的位置,提取的经纬度就是正确值。

方法二:构建坐标参考表后左连接(更稳妥)

先提取每个To对应的唯一经纬度作为参考表,再通过From字段和参考表左连接,适合To可能存在重复不同经纬度的场景:

library(dplyr)

# 构建To对应的坐标参考表
to_coords <- df %>%
  distinct(To, Latitude, Longitude) %>%
  rename(From = To, From.Lat = Latitude, From.Lon = Longitude)

# 左连接到原数据集
df_processed <- df %>%
  left_join(to_coords, by = "From")

两种方法都能实现:无论在哪一行,只要From等于某个To值,就将该To对应的经纬度赋值给From的经纬度字段。

内容的提问来源于stack exchange,提问作者roday

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 22:41:05