如何在R中基于公司和年份双重条件统计董事数量并生成新列
在R中按公司和年份统计董事数量并新增列
你可以通过分组计算实现需求,以下是两种高效的方法,适用于你的大样本数据集(845,000+观测值):
原始数据示例
COMPANY DIRECTOR YEAR A Mark 2005 A Steven 2005 A Mark 2006 A Steven 2006 B John 2006 B Elias 2006 B Vince 2006 B John 2007 B Elias 2007 B Vince 2007 C Peter 2005 C Josh 2005 C Adam 2005 C Evan 2005 C Peter 2006 C Josh 2006 C Adam 2006 C Evan 2006 C Peter 2007 C Josh 2007 C Adam 2007 C Evan 2007
预期结果
COMPANY DIRECTOR YEAR NUMBERDIRECTORS A Mark 2005 2 A Steven 2005 2 A Mark 2006 2 A Steven 2006 2 B John 2006 3 B Elias 2006 3 B Vince 2006 3 B John 2007 3 B Elias 2007 3 B Vince 2007 3 C Peter 2005 4 C Josh 2005 4 C Adam 2005 4 C Evan 2005 4 C Peter 2006 4 C Josh 2006 4 C Adam 2006 4 C Evan 2006 4 C Peter 2007 4 C Josh 2007 4 C Adam 2007 4 C Evan 2007 4
方法1:Base R 原生实现
使用ave()函数按COMPANY和YEAR分组,计算每组的观测数量(即董事人数),并将结果映射回原数据的每一行:
# 假设你的数据框名为df df$NUMBERDIRECTORS <- ave(rep(1, nrow(df)), df$COMPANY, df$YEAR, FUN = length)
方法2:dplyr 简洁实现
如果你习惯使用tidyverse工具链,dplyr的分组+新增列操作更直观:
library(dplyr) df <- df %>% group_by(COMPANY, YEAR) %>% # 按公司和年份分组 mutate(NUMBERDIRECTORS = n()) %>% # 统计每组行数作为董事数量 ungroup() # 取消分组,避免后续操作受影响
两种方法都能高效处理你的大样本数据,最终都会生成符合预期的NUMBERDIRECTORS列。
内容的提问来源于stack exchange,提问作者Robbert
相关产品推荐
相关产品推荐

