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

如何按ID分组生成含首次/末次年份的DataFrame?R语言求助

按ID汇总个体首次/末次记录年份的解决方案

问题背景

现有包含多个个体多年记录的DataFrame,需要生成汇总表,展示每个ID对应的首次记录年份和末次记录年份。示例数据如下:

df1<-data.frame(ID=c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5),
              year=c("2021","2021","2022","2023","2021","2021","2022","2023","2021","2021","2022","2023",
                       "2021","2021","2022","2023","2021","2021","2022","2023"),
                x=c(2,4,5,9,9,7,5,3,2,4,5,9,9,7,5,3,6,8,3,4),
                y=c(2,4,5,9,9,7,5,3,2,4,5,9,9,7,5,3,6,8,3,4))

原尝试代码仅返回一行结果,无法按ID分组展示:

IDs<-df1 %>% 
  group_by(ID) %>% 
  summarise(strYear=(min(year))

问题原因与解决代码

错误原因

原代码存在语法错误:summarise函数内的表达式缺少闭合右括号,导致分组逻辑未正确执行,返回异常结果。

修正后的代码

以下代码可按ID分组,同时计算首次年份和末次年份:

library(dplyr)

# 方案1:直接对字符型year计算(适用于格式规范的年份字符串)
ID_year_summary <- df1 %>%
  group_by(ID) %>%
  summarise(
    first_year = min(year),
    last_year = max(year),
    .groups = "drop"  # 取消分组,返回普通DataFrame
  )

# 方案2:将year转为数值型后计算(更严谨,避免字符串排序异常)
ID_year_summary <- df1 %>%
  mutate(year = as.numeric(year)) %>%
  group_by(ID) %>%
  summarise(
    first_year = min(year),
    last_year = max(year),
    .groups = "drop"
  )

结果说明

运行后将得到每行对应一个唯一ID的汇总表,包含first_year(首次记录年份)和last_year(末次记录年份)字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:53:07