R语言按client_id分组复制最小which_year对应frequency到组内所有行
R实现分组取最小值对应值填充全组的方法
以下三种方案均可实现需求,核心逻辑均为按client_id分组后提取组内which_year最小值对应的frequency值,填充至组内所有行:
方法1:使用dplyr(tidyverse生态,可读性最高)
适合习惯tidyverse语法的场景,代码逻辑清晰易维护:
# 加载依赖包 library(dplyr) # 计算新字段 result_df <- df %>% group_by(client_id) %>% mutate(frequency_start = frequency[which.min(which_year)]) %>% ungroup()
方法2:Base R实现,无需安装额外包
适合不想引入第三方依赖的场景:
df$frequency_start <- ave(seq(nrow(df)), df$client_id, FUN = function(row_idx) { df$frequency[row_idx][which.min(df$which_year[row_idx])] })
方法3:使用data.table,适合百万级以上大数据量场景
运算速度远高于前两种方案,适合处理大规模数据集:
# 加载依赖包 library(data.table) # 转换为data.table格式并计算新字段 setDT(df) df[, frequency_start := frequency[which.min(which_year)], by = client_id]
内容的提问来源于stack exchange,提问作者Zofia Smoleń
相关产品推荐
相关产品推荐

