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

如何用dplyr统计数据框中各ID-年份的唯一动物追踪天数

用dplyr计算每个个体-年份组合的唯一追踪天数

不需要单独用duplicated()先找重复项,直接用dplyr的分组+汇总就能一步到位,代码更简洁高效:

# 加载dplyr包
library(dplyr)

# 你的原始数据
ID<-c(1,1,1,2,2,2)
Year<-c(2004,2004,2005,2004,2005,2005)
Date<-c("2004-01-23","2004-04-12","2005-06-13","2004-04-05","2005-01-12","2005-01-12")
Date<-as.Date(Date)
df<-data.frame(ID,Year,Date)

# 核心处理代码
result <- df %>%
  group_by(ID, Year) %>%
  summarize(`Unique Days` = n_distinct(Date), .groups = "drop")

# 查看结果
print(result)

代码解释

  • group_by(ID, Year):按个体ID和年份分组,确保我们只在每个组合内计算天数
  • n_distinct(Date):自动统计每组内不重复的日期数量,完美解决同天多次记录只算1天的需求
  • .groups = "drop":计算完成后取消分组,得到普通的数据框结构

运行后得到的结果和你期望的完全一致:

IDYearUnique Days
120042
120051
220041
220051

如果你坚持要用duplicated()的思路

也可以先去除重复的ID-Year-Date组合,再分组计数:

# 去重
df_unique <- df[!duplicated(df[,1:3]),]

# 分组计数
result_alt <- df_unique %>%
  group_by(ID, Year) %>%
  summarize(`Unique Days` = n(), .groups = "drop")

这个方法也能得到同样结果,但不如直接用n_distinct()一步到位来得简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:57:37