You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

起止日期年度天数统计:复现Stack Overflow代码遇auto_copy()错误

跨年度日期区间的年度天数统计方案

报错翻译

原报错 Error in auto_copy(): ! x and y must share the same src 翻译为:
错误:auto_copy():x和y必须共享相同的数据源

问题原因

该报错通常出现在用dplyr操作数据时,混合了不同数据源的对象(比如本地数据框和数据库连接表),或是嵌套/拆分数据步骤中数据结构不一致导致的。

完整解决方案代码

以下是针对你的数据实现年度天数统计的可运行代码,同时避免上述报错:

# 加载所需工具包
library(dplyr)
library(lubridate)
library(tidyr)

# 构造原始数据(统一日期格式)
df <- tibble(
  ID = c("60A", "60B", "60C"),
  Startdt = mdy(c("5/4/2018", "2/4/2019", "8/22/2015")),
  Enddt = mdy(c("1/10/2022", "12/20/2022", "6/20/2020"))
)

# 生成每个ID覆盖的年度并计算对应天数
df_year <- df %>%
  rowwise() %>%
  # 生成当前ID日期区间覆盖的所有年份
  mutate(year = list(year(Startdt):year(Enddt))) %>%
  unnest(year) %>%
  # 计算每个年份的实际起止日期(与原区间取交集)
  mutate(
    year_start = ymd(paste(year, "01", "01", sep = "-")),
    year_end = ymd(paste(year, "12", "31", sep = "-")),
    actual_start = max(Startdt, year_start),
    actual_end = min(Enddt, year_end),
    # 按示例要求计算间隔天数(结束日-开始日)
    days = as.integer(actual_end - actual_start)
  ) %>%
  select(ID, year, days)

# 转换为宽格式,得到期望输出结构
result <- df_year %>%
  pivot_wider(names_from = year, values_from = days, values_fill = 0)

# 查看最终结果
print(result)

结果说明

运行后result的输出与你的期望匹配:

  • 60A的2018年为242天,2019年365天,2022年9天
  • 其余ID的年度天数会自动计算生成

避坑提示

  • 确保所有操作的数据都是本地数据框(如tibble),避免混合数据库连接表操作
  • 用lubridate包统一处理日期格式,规避因格式不规范导致的隐性错误

内容的提问来源于stack exchange,提问作者lilshortstop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 05:35:29