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

基于Year&CompanyID分组筛选符合董事替换条件的R数据行

解决方法

首先加载dplyr包(未安装的话先运行install.packages("dplyr")),然后用以下代码处理你的数据:

library(dplyr)

# 原始数据
df <- structure(list(Year = c(2005, 2005, 2005, 2005, 2005, 2005, 2005, 
2005, 2006, 2006, 2006, 2006, 2006, 2006, 2006), CompanyID = c(5, 
5, 5, 6, 6, 7, 7, 7, 5, 5, 5, 6, 6, 7, 7), Age = c(55, 48, 62, 
62, 41, 62, 55, 63, 55, 48, 62, 62, 41, 62, 55), Gender = c("M", 
"M", "F", "M", "F", "M", "F", "M", "F", "M", "F", "F", "F", "M", 
"F"), JOIN = c(1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1), 
    LEAVE = c(0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0)), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -15L))

# 筛选符合条件的行
result <- df %>%
  group_by(Year, CompanyID) %>%
  mutate(
    # 统计组内女性入职人数
    female_join = sum(Gender == "F" & JOIN == 1),
    # 统计组内男性离职人数
    male_leave = sum(Gender == "M" & LEAVE == 1),
    # 统计组内年龄>60的离职男性人数
    male_leave_over60 = sum(Gender == "M" & LEAVE == 1 & Age > 60)
  ) %>%
  # 筛选出符合条件的组:1位女性入职、1位男性离职且该男性年龄>60
  filter(female_join == 1 & male_leave == 1 & male_leave_over60 == 1) %>%
  # 只保留对应的入职女性和离职男性行
  filter((Gender == "F" & JOIN == 1) | (Gender == "M" & LEAVE == 1 & Age > 60)) %>%
  # 移除临时计算的列
  select(-female_join, -male_leave, -male_leave_over60) %>%
  ungroup()

# 查看结果
result

代码逻辑说明

  1. 分组计算:按Year和CompanyID分组后,分别统计每组内符合条件的女性入职人数、男性离职人数,以及年龄超过60的离职男性人数。
  2. 组筛选:只保留那些恰好有1位女性入职、1位男性离职,且该离职男性年龄超过60的组。
  3. 行筛选:在符合条件的组中,仅保留入职女性和年龄超60的离职男性这两类行。
  4. 清理数据:移除临时计算的辅助列并取消分组。

预期输出

运行上述代码后,得到的结果与预期一致:

# A tibble: 4 × 6
   Year CompanyID   Age Gender  JOIN LEAVE
  <dbl>      <dbl> <dbl> <chr>  <dbl> <dbl>
1  2005          6    62 M          0     1
2  2005          6    41 F          1     0
3  2006          7    62 M          0     1
4  2006          7    55 F          1     0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 18:51:10