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

使用for循环提取子串并匹配DataFrame计算对应成本的技术问询

解决方案:基于For循环实现Zone适配的成本计算

我来帮你实现这个需求,完全用for循环来适配不同的zone取值,步骤清晰且符合你的要求:

首先,先确认我们的输入数据

先构造你提供的两个DataFrame:

# 构造df1
zone = c("A", "B", "C")
country_name = c("Canada and UK", "UK and USA", "USA and Canada and UK")
df1 = data.frame(zone, country_name, stringsAsFactors = FALSE)

# 构造df2
zone_area = c("A", "A", "A", "B", "B", "B", "C", "C", "C")
country_name = c("Canada", "UK", "USA", "Canada", "UK", "USA", "Canada", "UK", "USA")
cost = c(4, 8, 6, 5, 6, 9, 8, 7, 5)
df2 = data.frame(zone_area, country_name, cost, stringsAsFactors = FALSE)

核心实现代码(基于For循环)

下面的代码严格遵循你要求的步骤,并且完全适配任意zone取值的变化:

# 初始化目标DataFrame df3,复制df1的基础结构,先将cost列设为0
df3 = df1
df3$cost = 0

# 获取所有唯一的zone值,确保循环能覆盖所有可能的zone
unique_zones = unique(df1$zone)

# 外层循环:遍历每个独立的zone
for (current_zone in unique_zones) {
  # 找到df1中当前zone对应的所有行的索引
  target_rows = which(df1$zone == current_zone)
  
  # 内层循环:处理当前zone下的每一行数据
  for (row_idx in target_rows) {
    # 提取当前行country_name中的所有国家子串
    country_list = unlist(strsplit(df1$country_name[row_idx], " and "))
    
    # 从df2中匹配当前zone对应的国家成本,构建映射关系
    zone_cost_data = df2[df2$zone_area == current_zone, ]
    country_to_cost = setNames(zone_cost_data$cost, zone_cost_data$country_name)
    
    # 计算当前行所有国家的成本总和
    total_cost = sum(country_to_cost[country_list])
    
    # 将结果赋值给df3对应行的cost列
    df3$cost[row_idx] = total_cost
  }
}

# 查看最终结果
print(df3)

代码解释

  • 初始化df3:直接复制df1的zone和country_name列,确保结构和目标一致,先把cost列初始为0用于后续填充。
  • 遍历唯一zone:通过unique(df1$zone)获取所有独立的zone,不管后续zone新增或修改,循环都能自动适配。
  • 提取国家子串:用strsplit按" and "分割字符串,再用unlist转成向量,方便后续匹配。
  • 构建成本映射:从df2中筛选当前zone的成本数据,用setNames创建“国家-成本”的命名向量,快速完成匹配。
  • 计算总成本:直接通过命名向量索引获取每个国家的成本,求和后赋值给df3对应行。

运行结果

执行代码后,你会得到完全符合要求的df3:

zone           country_name cost
1    A          Canada and UK   12
2    B            UK and USA   15
3    C USA and Canada and UK   20

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:34:31