R处理Date类数据时recode函数报错的替代方案咨询
问题原因
recode()函数本身没有适配Date类的处理方法,同时你原有代码的逻辑也缺少匹配规则:没有指定具体哪个日期值需要被替换为First,所以运行报错。
解决方案
直接使用case_when()或者if_else()配合日期大小判断实现需求即可,R原生支持Date类型的大小比较,不需要额外做类型转换:
场景1:每个track分组仅有两条记录(对应你提供的示例数据情况)
直接用if_else()即可:
library(dplyr) mydata <- data %>% group_by(track) %>% mutate(newdate = if_else(date == min(date), "First", "Last"))
场景2:部分track分组存在3条及以上不同日期的记录
用case_when()自定义不同情况的标记规则:
mydata <- data %>% group_by(track) %>% mutate( newdate = case_when( date == min(date) ~ "First", # 最早日期标First date == max(date) ~ "Last", # 最晚日期标Last .default = "Middle" # 中间日期可自定义标记,不需要的话填NA_character_即可 ) )
效果验证
对你提供的示例数据运行上述代码后,得到的newdate列结果符合预期:
- 同track下最早的1997年日期统一标记为
First - 同track下最晚的2020年日期统一标记为
Last
内容的提问来源于stack exchange,提问作者JaFranke
相关产品推荐
相关产品推荐

