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

基于dplyr实现Lookup与Data数据集的区域别名匹配及指标计算

用dplyr实现高效的区域别名分配与指标计算

假设你的数据集结构如下(可根据实际字段名调整):

# 示例Lookup数据集
Lookup <- tibble(Region = c("A", "B", "C", "D"))

# 示例Data数据集
Data <- tibble(
  Region = c("A", "A", "B", "C", "C", "C", "D"),
  Number = c(0.45, 0.28, 0.35, 0.5, 0.32, 0.25, 0.1),
  Alias = c("Alias_A1", "Alias_A2", "Alias_B1", "Alias_C1", "Alias_C2", "Alias_C3", "Alias_D1")
)

以下是替代循环的高效dplyr解决方案:

library(dplyr)
library(stringr)

# 1. 预处理Data:筛选符合条件的记录,分组聚合生成衍生指标
processed_data <- Data %>%
  # 筛选Number>0.30的记录
  filter(Number > 0.30) %>%
  # 按区域分组
  group_by(Region) %>%
  # 组内按Number降序排序,确保别名顺序正确
  arrange(desc(Number), .by_group = TRUE) %>%
  # 聚合生成所需指标
  summarise(
    New_Name = str_c(Alias, collapse = ", "),  # 按降序拼接别名成字符串
    Revised_Name_Number = n(),  # 满足条件的别名数量
    Max_Number = max(Number),   # 该区域最大Number值
    Avg_Number = mean(Number)   # 该区域平均Number值
    # 可根据需求添加其他衍生指标
  ) %>%
  ungroup()

# 2. 关联Lookup与预处理后的Data,保留所有Lookup区域
final_result <- Lookup %>%
  left_join(processed_data, by = "Region") %>%
  # 为无符合条件记录的区域填充默认值
  mutate(
    New_Name = ifelse(is.na(New_Name), "", New_Name),
    Revised_Name_Number = ifelse(is.na(Revised_Name_Number), 0, Revised_Name_Number),
    Max_Number = ifelse(is.na(Max_Number), 0, Max_Number),
    Avg_Number = ifelse(is.na(Avg_Number), 0, Avg_Number)
  )

代码说明

  • 筛选与分组:先用filter过滤出Number>0.30的记录,再按Region分组,确保每个区域的处理独立;
  • 排序与聚合:arrange保证组内记录按Number降序排列,summarise批量生成所有衍生指标,其中str_c用于拼接别名字符串,n()统计符合条件的别名数量;
  • 关联与补全:通过left_join保留Lookup中的所有区域,再用mutate处理缺失值,避免结果中出现NA;
  • 效率优势:dplyr采用向量化操作,比循环更高效,尤其在数据集较大时表现更明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:51:20