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

R语言如何按年份、股票代码分组保留dirnbr最大的行用于数据集合并

解决方案

以下是不同工具栈下的实现方式,你提到的inner_join属于tidyverse体系,优先推荐dplyr方案:

1. dplyr(tidyverse生态)方案

这是最符合你现有操作习惯的方式,直接分组汇总得到需要的三个字段即可,不需要单独筛选最大行:

library(dplyr)

# 处理第二个数据集,生成年度-股票代码对应的董事会总人数表
board_size_df <- 你的第二个数据集名称 %>%
  group_by(年份, ticker) %>%
  summarise(董事会总人数 = max(dirnbr, na.rm = TRUE), .groups = "drop")

# 直接和第一个数据集合并
final_df <- inner_join(你的第一个数据集名称, board_size_df, by = c("年份", "ticker"))

如果你确实需要实现「保留每组dirnbr最大的行」的逻辑(比如后续需要用到该行的其他字段),可以用slice_max实现:

board_size_df <- 你的第二个数据集名称 %>%
  group_by(年份, ticker) %>%
  slice_max(dirnbr, n = 1, with_ties = FALSE) %>%
  ungroup() %>%
  select(年份, ticker, 董事会总人数 = dirnbr)

2. data.table方案

如果你的数据集规模很大,用data.table处理速度更快:

library(data.table)

# 将数据集转为data.table格式
setDT(你的第二个数据集名称)
# 分组取最大值
board_size_dt <- 你的第二个数据集名称[, .(董事会总人数 = max(dirnbr, na.rm = TRUE)), by = .(年份, ticker)]

3. 基础R方案

不需要安装额外依赖包,用原生函数实现:

board_size_df <- aggregate(dirnbr ~ 年份 + ticker, data = 你的第二个数据集名称, FUN = max, na.rm = TRUE)
# 重命名第三列为董事会总人数
colnames(board_size_df)[3] <- "董事会总人数"

注意事项

  • 参数na.rm = TRUE用于避免dirnbr存在缺失值时返回NA,如果你的数据无缺失可以移除该参数
  • 合并前请确认两个数据集的年份、ticker字段格式完全一致,比如年份均为数值型、ticker的大小写、前后空格等规则统一,避免匹配失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:54:03