R语言:按分组查找最早日期并生成Y/N标识变量
简化分组判断最早日期的R代码写法
原始数据框
Issuer.Name Issue.Date name1 01/12/2021 name2 05/04/2022 name2 21/10/2021 name3 08/09/2020 name4 30/08/2023 name4 12/05/2021 name4 18/10/2022 name5 01/12/2021
需求说明
按Issuer.Name分组,给每条记录新增标记列First.Issue:当该条的Issue.Date是分组内最早日期时标记为"Y",否则为"N",期望结果如下:
Issuer.Name Issue.Date First.Issue name1 01/12/2021 Y name2 05/04/2022 N name2 21/10/2021 Y name3 08/09/2020 Y name4 30/08/2023 N name4 12/05/2021 Y name4 18/10/2022 N name5 01/12/2021 Y
原始实现代码
用户原本的实现代码:
df <- df %>% group_by(Issuer.Name) %>% arrange(Issue.Date) %>% mutate(First.Issue.Date = Issue.Date[1]) %>% mutate(First.Issue=case_when(Issue.Date==First.Issue.Date~"Y",.default = "N"))
简化写法
可以合并操作步骤,直接用min()获取分组内最早日期,无需提前排序,简化后代码更紧凑:
df <- df %>% group_by(Issuer.Name) %>% mutate(First.Issue = if_else(Issue.Date == min(Issue.Date), "Y", "N")) %>% ungroup() # 可选,不需要保留分组状态时取消分组
简化点说明
- 用
min(Issue.Date)直接提取每组最早日期,省去arrange排序和中间辅助列的创建 - 二元判断场景下,
if_else比case_when写法更简洁 - 最后添加
ungroup()可以避免后续操作受分组状态影响,根据实际需求选择是否保留
内容的提问来源于stack exchange,提问作者Bertrand G
相关产品推荐
相关产品推荐

