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

如何用dplyr的summarize和across为每组新增efficiency计算行?

解决方案

你可以修改代码,通过在分组内先提取Prod和Area的年份数据,计算出efficiency的对应值后,再与原组数据合并,具体代码如下:

ag_prod4 %>%
  group_by(country, item) %>%
  group_modify(function(data, keys) {
    # 提取当前组的Prod和Area行的年份列数据
    prod_vals = data[data$element == "Prod", starts_with("1961"):starts_with("2021")]
    area_vals = data[data$element == "Area", starts_with("1961"):starts_with("2021")]
    
    # 计算efficiency的年份值,处理可能的NA(比如某组没有Prod或Area的情况)
    efficiency_vals = ifelse(area_vals == 0 | is.na(area_vals), NA, prod_vals / area_vals)
    
    # 构造新增的efficiency行
    efficiency_row = tibble(
      country = keys$country,
      item = keys$item,
      element = "efficiency",
      !!!efficiency_vals
    )
    
    # 合并原数据和新增行
    bind_rows(data, efficiency_row)
  }) %>%
  ungroup()

代码说明:

  • 用group_modify替代summarize,能更灵活地操作每组的完整数据集,不受组内element数量、顺序的影响
  • 直接定位组内的Prod和Area行提取数值,避免依赖固定行序
  • 加入了对0值和NA的判断,防止出现除以0的报错
  • 通过bind_rows保留原有所有记录的同时,新增目标efficiency行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:28:14