R语言dataframe新增列:按Col1分组取Col2最大值实现类vlookup匹配
R实现按分组取Col2最大值填充Output列方案
先构造和你需求一致的示例数据方便测试:
df <- data.frame( Col1 = c(1, 1, 12, 12), Col2 = c(21, 20, 20, 19) )
以下三种常用实现方案均可直接得到目标结果:
方法1:dplyr包实现(tidyverse生态常用写法)
核心逻辑是按Col1分组后,将每组Col2的最大值填充到组内所有行:
library(dplyr) df_result <- df %>% group_by(Col1) %>% mutate(Output = max(Col2)) %>% ungroup() # 如果Col2存在缺失值,可修改为max(Col2, na.rm = TRUE)忽略缺失值计算
方法2:Base R原生实现(无需安装额外依赖包)
用ave函数直接按分组计算聚合值,返回和原数据长度完全匹配的向量:
df$Output <- ave(df$Col2, df$Col1, FUN = max)
方法3:data.table实现(适合超大数据量,性能最优)
library(data.table) setDT(df) df[, Output := max(Col2), by = Col1]
三种方案最终输出均符合预期:
Col1 Col2 Output 1 1 21 21 2 1 20 21 3 12 20 20 4 12 19 20
内容的提问来源于stack exchange,提问作者SM9
相关产品推荐
相关产品推荐

