R语言为数据框新增列 展示每个Code对应的最新Description
我今天花了数小时寻找该问题的解决方案,网上有类似讨论帖,但均无法完全匹配我的需求。
数据集
测试数据集生成代码如下:
Year <- c(2019, 2020, 2021, 2019, 2020, 2020, 2021, 2021) Term <- c("2019_T1", "2020_T1", "2021_T1", "2019_T1", "2020_T1", "2020_T2", "2021_T1", "2021_T2") Code <- c(1,1,1,2,2,2,2,2) Description <- c("Desc1","Desc1","Desc1", "Desc2", "Desc2", "Desc2", "Desc2_NotRecent","Desc2_Recent")
运行上述代码生成的表格如下:
Year Term Code Description 1 2019 2019_T1 1 Desc1 2 2020 2020_T1 1 Desc1 3 2021 2021_T1 1 Desc1 4 2019 2019_T1 2 Desc2 5 2020 2020_T1 2 Desc2 6 2020 2020_T2 2 Desc2 7 2021 2021_T1 2 Desc2_NotRecent 8 2021 2021_T2 2 Desc2_Recent
问题描述
如何为数据框新增一列,展示每个Code对应的最新Description?
我需要基于Term字段判断时间先后以找出最新描述,推测可先通过简单排序实现,但目前尚未摸索出正确方法。
必须以最新Term对应的值为准,本示例中最新Term为2021_T2,若误选首个值会调取旧描述,易给相关人员造成误解。
预期输出结果
Year Term Code Description Most_Recent 1 2019 2019_T1 1 Desc1 Desc1 2 2020 2020_T1 1 Desc1 Desc1 3 2021 2021_T1 1 Desc1 Desc1 4 2019 2019_T1 2 Desc2 Desc2_Recent 5 2020 2020_T1 2 Desc2 Desc2_Recent 6 2020 2020_T2 2 Desc2 Desc2_Recent 7 2021 2021_T1 2 Desc2_NotRecent Desc2_Recent 8 2021 2021_T2 2 Desc2_Recent Desc2_Recent
解决方案
Robin Gertenbach给出的简易解决方案如下(基于dplyr包实现):
df %>% group_by(Code) %>% dplyr::mutate(Most_Recent = dplyr::last(Description, Term))
内容的提问来源于stack exchange,提问作者Keelin
相关产品推荐
相关产品推荐

