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

如何确定日期范围内的唯一年份?Excel/R实现方法求助

当然可以!不管用Excel还是R都能轻松搞定这个需求,我给你分两种方法详细说明:

在Excel中实现

假设你的数据在A1:C5区域(A列是Clientnumber,B列是Date start,C列是Date end),按以下步骤操作:

  1. 提取时间段的起止年份:
    在D2单元格输入=YEAR(B2),E2输入=YEAR(C2),下拉填充到D5和E5,得到每行的开始年份和结束年份。

  2. 生成每个时间段覆盖的所有年份:
    在F2单元格输入以下公式(适用于Excel 365/2021及以上版本):

    =IF(D2=E2, D2, SEQUENCE(E2-D2+1,,D2))
    

    下拉填充后,每个行会生成对应的年份序列(比如第四行开始是2019、结束是2020,就会生成2019、2020两个值)。

  3. 合并所有年份并去重:
    在任意空白单元格(比如G2)输入:

    =UNIQUE(TOCOL(F2:F5, TRUE))
    

    这个公式会把F列的所有年份合并成一个列表,自动去重后得到你想要的唯一注册年份:2017,2018,2019,2020。

  4. 计算唯一年份的计数:
    在旁边单元格输入:

    =ROWS(G2:G5)
    

    或者直接嵌套公式一步到位:

    =ROWS(UNIQUE(TOCOL(F2:F5, TRUE)))
    

    就能得到计数结果:4。

如果你用的是旧版Excel(没有SEQUENCE和TOCOL函数),可以用数组公式生成年份序列,在F2输入后按Ctrl+Shift+Enter确认:

=IF(D2=E2, D2, ROW(INDIRECT(D2&":"&E2)))

后续去重可以用INDEX+MATCH组合来实现。

在R中实现

我们可以用基础R或者tidyverse工具包来处理,两种方式都很便捷:

方式一:基础R实现

先把数据读入R中,再逐步处理:

# 构造数据框
client_data <- data.frame(
  Clientnumber = c(1, 1, 1, 1),
  Date_start = as.Date(c("01-03-2017", "01-02-2018", "01-11-2018", "25-03-2019"), format = "%d-%m-%Y"),
  Date_end = as.Date(c("31-10-2017", "07-08-2018", "01-03-2019", "01-07-2020"), format = "%d-%m-%Y")
)

# 生成所有覆盖的年份
all_years <- unlist(apply(client_data, 1, function(row) {
  start_year <- as.integer(format(row["Date_start"], "%Y"))
  end_year <- as.integer(format(row["Date_end"], "%Y"))
  # 生成从开始到结束的年份序列
  start_year:end_year
}))

# 获取唯一的年份并排序
unique_years <- sort(unique(all_years))
# 计算年份计数
year_count <- length(unique_years)

# 查看结果
unique_years  # 输出:2017 2018 2019 2020
year_count    # 输出:4

方式二:tidyverse工具包实现(更简洁)

如果你习惯用tidyverse的语法,代码会更直观易读:

library(tidyverse)

# 处理数据
result <- client_data |>
  rowwise() |>
  # 为每行生成覆盖的年份列表
  mutate(years = list(year(Date_start):year(Date_end))) |>
  # 展开列表为单独的行
  unnest(years) |>
  # 提取唯一的年份并排序
  distinct(years) |>
  arrange(years)

# 获取唯一的年份和计数
unique_years <- result$years
year_count <- nrow(result)

# 查看结果
unique_years  # 输出:2017 2018 2019 2020
year_count    # 输出:4

内容的提问来源于stack exchange,提问作者E. van Dongen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:13:15