R语言如何按指定日期列范围对行求和并解决seq函数报错
问题解决方法
报错原因
你代码中经过format()处理的first_date和actual_date是字符串类型,seq()函数无法直接对字符串格式的日期生成连续序列,因此抛出类型错误。
正确实现代码
依赖lubridate包版本(适配你原代码的写法)
library(lubridate) # 动态取当年首日、上月首日的逻辑 first_date <- floor_date(Sys.Date(), unit = "year") actual_date <- floor_date(Sys.Date() %m-% months(1), unit = "month") # 若测试提供的2021年示例数据,替换为以下两行即可 # first_date <- dmy("01/01/2021") # actual_date <- dmy("01/08/2021") # 生成匹配列名格式的日期列名列表 target_cols <- format(seq.Date(first_date, actual_date, by = "month"), "%d/%m/%Y") # 逐行求和 df$ytd <- rowSums(df[, target_cols], na.rm = TRUE)
纯基础R版本(无需额外依赖)
# 动态取当年首日、上月首日的逻辑 first_date <- as.Date(paste0(format(Sys.Date(), "%Y"), "-01-01")) actual_date <- seq.Date(as.Date(cut(Sys.Date(), "month")) - 1, length.out = 2, by = "-1 month")[2] # 若测试提供的2021年示例数据,替换为以下两行即可 # first_date <- as.Date("2021-01-01") # actual_date <- as.Date("2021-08-01") target_cols <- format(seq.Date(first_date, actual_date, by = "month"), "%d/%m/%Y") df$ytd <- rowSums(df[, target_cols], na.rm = TRUE)
输出效果说明
以你提供的示例数据为例,执行后新增的ytd列结果为:96、184、104、96,符合1-8月对应列逐行求和的预期。
内容的提问来源于stack exchange,提问作者AlSub
相关产品推荐
相关产品推荐

