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

R语言中调整排放数据集NACE分类并解决聚合求和为0的问题

解决EU NACE REV.2分类映射与求和异常问题

问题核心

你遇到的TOT_IND和MARKT求和为0的问题,本质是错误地用单个NACE代码匹配逻辑处理聚合类分类:原始排放数据集的分类是单个NACE Rev.2代码(如A、B、C),而TOT_IND(全行业)、MARKT(特定行业子集)是聚合类,直接在case_when里写nace_code == "TOT_IND"会因为无匹配项生成空值,最终求和为0。

解决方案

方案1:先映射细分分类,再单独生成聚合类

先完成单个NACE代码到目标细分分类的映射,再通过分组求和生成两个聚合类的数据,最后合并所有分类:

library(tidyverse)

# 1. 处理单个NACE代码到细分目标分类的映射
emissions_data <- emissions_data %>%
  mutate(target_sector = case_when(
    nace_code %in% "A" ~ "AGRICULTURE",
    nace_code %in% c("B", "C") ~ "MANUFACTURING",
    nace_code %in% "D" ~ "UTILITIES",
    # 补充你的其他细分分类映射规则
    TRUE ~ NA_character_
  ))

# 2. 生成TOT_IND聚合数据(A-U全行业)
tot_ind_data <- emissions_data %>%
  summarise(
    target_sector = "TOT_IND",
    emissions = sum(emissions, na.rm = TRUE),
    # 按需要保留的维度(如年份、国家)分组
    .by = c(year, country)
  )

# 3. 生成MARKT聚合数据(排除L、O、P、Q、T、U)
markt_data <- emissions_data %>%
  filter(!nace_code %in% c("L", "O", "P", "Q", "T", "U")) %>%
  summarise(
    target_sector = "MARKT",
    emissions = sum(emissions, na.rm = TRUE),
    .by = c(year, country)
  )

# 4. 合并所有分类数据
final_emissions_data <- bind_rows(emissions_data, tot_ind_data, markt_data)

方案2:在case_when中标记聚合类归属,再分组求和

如果希望在单步中完成标记,可通过rowwise()和列表嵌套标记每行所属的所有目标分类,最后聚合求和:

emissions_data <- emissions_data %>%
  rowwise() %>%
  mutate(
    target_sector = list(c(
      # 标记细分分类
      case_when(
        nace_code %in% "A" ~ "AGRICULTURE",
        nace_code %in% c("B", "C") ~ "MANUFACTURING",
        # 补充其他细分规则
        TRUE ~ NA_character_
      ),
      # 所有行都归属TOT_IND
      "TOT_IND",
      # 符合条件的行归属MARKT
      ifelse(!nace_code %in% c("L", "O", "P", "Q", "T", "U"), "MARKT", NA_character_)
    )) %>% keep(~!is.na(.)) # 过滤空值
  ) %>%
  unnest(target_sector) %>%
  # 按目标分类、维度分组求和
  group_by(target_sector, year, country) %>%
  summarise(emissions = sum(emissions, na.rm = TRUE), .groups = "drop")

关键排查点

  • 检查原始数据的NACE代码格式:确认是否存在大小写差异(如"l"和"L")、前缀后缀(如"NACE_L"),可通过unique(emissions_data$nace_code)查看所有分类值
  • 验证映射结果:用filter(target_sector == "TOT_IND")查看映射后的数据,如果为空,说明匹配逻辑错误
  • 确保求和时保留必要维度:如果数据包含年份、国家等分组维度,必须按这些维度分组后再求和,避免跨维度错误聚合

内容的提问来源于stack exchange,提问作者Lucas van der List

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:57:21