使用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
相关产品推荐
相关产品推荐

