R语言data.table如何仅更新不符合指定条件的日期列最大值
错误原因说明
你之前的写法错误在于:max(sample$WeekEndingDate)返回的是单个日期值,直接对其赋值的语法不符合data.table的行修改规则,才会导致全列被覆盖。
正确实现代码
写法1:易读分步版(推荐多数场景使用)
逻辑清晰可读性强,若存在多条最大值行也会全部更新:
# 计算当前表中的最大周日期 max_week <- max(sample$WeekEndingDate) # 仅当最大日期早于x_date时,更新对应行的日期字段 if (max_week < x_date) { sample[WeekEndingDate == max_week, WeekEndingDate := x_date] }
写法2:高效单行版(适合大表场景)
直接定位到最大值行原位修改,无需额外存储中间变量,执行效率更高:
sample[.I[which.max(WeekEndingDate)], WeekEndingDate := fifelse(max(WeekEndingDate) < x_date, x_date, WeekEndingDate)]
注意:该写法仅更新第一个出现最大值的行,若存在多条相同最大值行请选择写法1。
结果验证
执行修改后可以用以下语句查看修改结果:
# 查看表中最后一行(最大日期行)的数值 tail(sample, 1)
内容的提问来源于stack exchange,提问作者lagn91
相关产品推荐
相关产品推荐

