R语言如何通过ID匹配将站点坐标信息合并到骑行服务数据框中
高效实现方案
提供两种常用的高效实现方案,均为向量化操作,远快于for循环,适合大样本量场景:
基础R实现(无需额外依赖包)
你已经用到的match本身就是高效的向量化函数,拿到索引后直接提取对应列赋值即可:
# 匹配起点ID对应的stations行索引 orig_idx <- match(jan2020$Origen_Id, stations$id) # 新增起点经纬度列 jan2020$Lat_Orig <- stations$Latitude[orig_idx] jan2020$Lon_Orig <- stations$Longitude[orig_idx] # 匹配终点ID对应的stations行索引 dest_idx <- match(jan2020$Destiny_Id, stations$id) # 新增终点经纬度列 jan2020$Lat_Des <- stations$Latitude[dest_idx] jan2020$Long_Des <- stations$Longitude[dest_idx]
dplyr实现(写法更简洁易维护)
如果可以使用tidyverse生态的工具,两次左关联即可完成需求,代码可读性更高:
library(dplyr) jan2020_new <- jan2020 %>% # 关联起点站点的经纬度 left_join(stations %>% select(id, Latitude, Longitude), by = c("Origen_Id" = "id")) %>% rename(Lat_Orig = Latitude, Lon_Orig = Longitude) %>% # 关联终点站点的经纬度 left_join(stations %>% select(id, Latitude, Longitude), by = c("Destiny_Id" = "id")) %>% rename(Lat_Des = Latitude, Long_Des = Longitude)
注意:如果jan2020中存在stations里没有的站点ID,对应经纬度会自动填充为NA,符合数据处理逻辑。
内容的提问来源于stack exchange,提问作者Mari
相关产品推荐
相关产品推荐

