基于单列更新表中所有日期列的实现方案咨询
解决方案:按基准日期过滤日期列并替换为NULL
你可以用dplyr的mutate()结合across()实现需求(mutate_all()已被弃用,官方推荐用across()),单行代码如下:
library(dplyr) df <- df %>% mutate(across(-purchase_motion, ~ifelse(.x >= (purchase_motion - 7) & .x <= purchase_motion, .x, NA)))
代码说明:
across(-purchase_motion):指定对除purchase_motion之外的所有列执行操作- 逻辑判断:
(.x >= (purchase_motion - 7) & .x <= purchase_motion)检查当前列的日期是否落在purchase_motion当天及往前7天的区间内 - 满足条件保留原日期
.x,不满足则替换为NA(对应你需求中的NULL)
补充提示:
- 如果你的
purchase_motion列名包含空格,需要用反引号包裹:across(-purchase motion, ...) - 确保所有列都是Date类型,若有非Date列,可先转换:
df <- df %>% mutate(across(everything(), as.Date))
内容的提问来源于stack exchange,提问作者alexT
相关产品推荐
相关产品推荐

