R语言基于嵌套成员关系的多表条件连接实现方法咨询
解决方案
方案1:dplyr 直接匹配(保留原始嵌套结构,兼容性强)
library(tidyverse) # 核心处理逻辑 result <- df %>% rowwise() %>% # 匹配同镇名、且属于当前邮编列表的df2记录 mutate(value = df2$value[df2$town == town & df2$zip %in% data$zip]) %>% ungroup() %>% filter(!is.na(value))
运行后输出与要求完全一致:
# A tibble: 3 × 4 county town data value <dbl> <chr> <list> <chr> 1 1 A <tibble [3 × 1]> foo 2 2 B <tibble [4 × 1]> bar 3 3 B <tibble [1 × 1]> ski
方案2:data.table 高性能方案(适合十万行以上大数据量场景)
利用邮编范围匹配实现超高速不等值连接,性能远高于逐行成员判断:
library(data.table) setDT(df) setDT(df2) # 预计算每个县镇组合的邮编上下限 df[, `:=`(zip_min = map_dbl(data, ~min(.x$zip)), zip_max = map_dbl(data, ~max(.x$zip)))] # 范围条件连接 result <- df[df2, on = .(town = town, zip_min <= zip, zip_max >= zip)] %>% .[, .(county, town, data, value)]
内容的提问来源于stack exchange,提问作者Scott
相关产品推荐
相关产品推荐

