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

按组计算所有行对的重叠工作年限,求R语言解决方案

问题描述

需要计算个体在指定年份(current_year)所在组内与其他同事的共事总年限,即个体与同组同年份的其他同事的共事时长之和。

数据集结构如下:

mydata <- data.frame(group_id= c(1,1,1,1,1,1,2,2),
                 individual_id= c(1,2,3,1,2,4,5,6),
                 working_since= c(2000,2005,1998,2000,2005,2009,2005,1990),
                 current_year= c(2008,2008,2008,2009,2009,2009,2008,2008)
              )

组内的个体数量会随年份变化,需对同组同年份的所有行进行两两比较,计算共事时长之和。

预期输出:

mydata <- data.frame(group_id= c(1,1,1,1,1,1,2,2),
                 individual_id= c(1,2,3,1,2,4,5,6),
                 working_since= c(2000,2005,1998,2000,2005,2009,2005,1990),
                 current_year= c(2008,2008,2008,2009,2009,2009,2008,2008),
                 overlapping_years_caculation= c("4+9", "4+4", "9+4", "5+1", "6+1", "1+1", "4", "4"),
                 overlapping_years_result = c(13, 8, 13, 6, 7, 2, 4, 4)
              )

注:假设个体在年初开始任职。

解决方案

使用dplyr和purrr包可以高效实现需求,步骤如下:

  1. 加载依赖包:
library(dplyr)
library(purrr)
  1. 分组计算共事时长:
result <- mydata %>%
  # 按组和当前年份分组,确保仅在同组同年的同事间比较
  group_by(group_id, current_year) %>%
  mutate(
    # 生成组内所有同事的ID和入职年份列表
    peer_list = list(tibble(peer_id = individual_id, peer_since = working_since)),
    # 计算与每个同事的共事时长,排除自己
    overlap_details = map(peer_list, ~{
      .x %>%
        filter(peer_id != individual_id) %>%
        mutate(
          # 共事时长 = 当前年份 - 两人入职年份的最大值
          overlap = current_year - max(working_since, peer_since)
        )
    }),
    # 拼接计算过程字符串
    overlapping_years_caculation = map_chr(overlap_details, ~paste(.x$overlap, collapse = "+")),
    # 计算总共事时长
    overlapping_years_result = map_dbl(overlap_details, ~sum(.x$overlap))
  ) %>%
  # 移除中间辅助列
  select(-peer_list, -overlap_details) %>%
  ungroup()
  1. 查看结果:
print(result)

核心逻辑

  • 分组维度锁定为group_id + current_year,避免跨组或跨年的无效比较
  • 对每个个体,过滤掉自身后,计算与其余同事的共事时长:因为双方都在current_year时属于该组,所以共事结束年为current_year,开始年取两人入职年份的较晚值,时长为两者差值
  • 最后将所有共事时长拼接成字符串记录计算过程,同时求和得到总时长

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:06:28