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

R语言如何对错位缺失的数据框按Region分组统计Event数量

错位数据Region-Event计数方案

问题说明

  • 数万行导出数据因加载错误存在列错位、值缺失问题,规律为Region值会错填到后续行的Event列位置,Event字段取值固定
  • 原有直接按现有Region、Event列分组计数的dplyr逻辑无法识别错位数据,会出现大量漏算
  • 示例数据构造代码:
df <- data.frame(Region=c(NA,'region2','region1',NA,'region3','region3',NA,'region5'), 
                 Event=c('region1','event1','event1','region2','event1','event1','region4','event1'), 
                 Campaign=c('event1','campaign2','campaing1','event1','campaing1','campaign2','event1',NA))
  • 原有错误统计代码:
df <- df %>%
  select(Region, Event) %>% 
  group_by(Region, Event) %>%
  summarise(Event = n())

实现逻辑

核心处理步骤分为4步:

  1. 先定义业务侧固定的合法Event取值集合,作为判断行是否错位的依据
  2. 逐行识别错位行:Event列取值不在合法Event列表的行即为错位行,错位行的真实Region取自当前行Event列的错位值,真实Event取自后续列(示例中为Campaign列)的对应值;非错位行直接取对应列的原始值
  3. 用向前填充逻辑补全所有行的真实Region归属,解决原始Region列的NA缺失问题
  4. 过滤掉真实Event不合法的异常行,按真实Region分组计数即可

可直接运行的代码

library(dplyr)
library(tidyr)

# 替换为业务实际的合法Event取值集合
valid_events <- c("event1")

df_fixed <- df %>%
  mutate(
    # 标记当前行是否为列错位行
    is_misaligned = !Event %in% valid_events,
    # 提取当前行的真实Region值
    real_region = ifelse(is_misaligned, Event, Region),
    # 提取当前行的真实Event值
    real_event = ifelse(is_misaligned, Campaign, Event)
  ) %>%
  # 向前填充Region,补全所有行的Region归属
  fill(real_region, .direction = "down") %>%
  # 仅保留Event合法的有效数据行
  filter(real_event %in% valid_events)

# 分组统计每个Region对应的Event数量
count_result <- df_fixed %>%
  group_by(region = real_region) %>%
  summarise(event_total = n(), .groups = "drop")

示例数据运行结果

针对提供的示例数据,运行后得到的正确计数结果为:

  • region1:2条
  • region2:2条
  • region3:2条
  • region4:1条
  • region5:1条

适配说明

  • 如果实际数据错位偏移列数和示例不一致,只需要调整real_region、real_event取值对应的列名即可,核心逻辑无需改动
  • 数万行规模数据下该代码运行效率充足,无需额外性能优化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:45:42