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

如何用dplyr识别同一日期时段下分组个体的重复记录

动物观测数据集重复组标记解决方案

问题背景

处理一个15000+行的动物观测数据集,观测时段为30分钟,分为GroupA、GroupB、GroupC三组。每行包含Date(DD/MM/YYYY)、TimeStart(如6:00、6:30)、IndividualsObserved字段。存在以下情况:

  • 组可能混合记录(如GroupB;C)
  • 同一组的个体可能在同一Date+TimeStart下被拆分成多行记录

需要新增MatchedSimultaneousEntries列:当某行对应的任意一组在同日期时段有其他行记录时标记为Yes,否则为No。

原始数据示例

Date            Group        TimeStart    IndividualsObserved
01/01/2018      GroupA         6:00       IndA1,IndA2,IndA3,IndA8
01/01/2018      GroupB;C       6:00       IndB1,IndB4,IndB7,IndC2,IndC5,IndC10
01/01/2018      GroupB         6:00       IndB2,IndB3,IndB5,IndB6,IndB8,IndB9  

期望输出示例

Date         Group      TimeStart  IndividualsObserved                          MatchedSimultaneousEntries                                        
01/01/2018   GroupA     6:00       IndA1,IndA2,IndA3,IndA8                         No 
01/01/2018   GroupB;C   6:00       IndB1,IndB4,IndB7,IndB10, IndC2,IndC5,IndC10    Yes
01/01/2018   GroupB     6:00       IndB2,IndB3,IndB5,IndB6,IndB8,IndB9             Yes 

解决方案代码

核心思路是先拆分混合组,统计每个Date+TimeStart+单组的出现次数,再匹配回原数据判断是否存在重复组记录:

library(dplyr)
library(tidyr)

# 处理数据集
df_processed <- df %>%
  # 拆分混合组为单独行
  separate_rows(Group, sep = ";") %>%
  # 按日期、时段、单组统计出现次数
  group_by(Date, TimeStart, Group) %>%
  mutate(group_count = n()) %>%
  ungroup() %>%
  # 合并回原组格式(恢复混合组)
  group_by(Date, TimeStart, IndividualsObserved) %>%
  summarise(
    Group = paste(unique(Group), collapse = ";"),
    # 判断该组对应的任意单组是否出现多次
    MatchedSimultaneousEntries = ifelse(any(group_count > 1), "Yes", "No")
  ) %>%
  ungroup()

代码说明

  • separate_rows(Group, sep = ";"):把混合组(如GroupB;C)拆分成两行,分别对应GroupB和GroupC
  • group_by(Date, TimeStart, Group) %>% mutate(group_count = n()):统计每个日期+时段+单组的出现行数,若大于1说明该组在此时段有重复记录
  • 后续分组合并恢复原数据结构,并通过any(group_count > 1)判断当前行是否包含有重复记录的组,标记Yes/No

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 12:03:23