如何用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":计算完成后取消分组,得到普通的数据框结构
运行后得到的结果和你期望的完全一致:
| ID | Year | Unique Days |
|---|---|---|
| 1 | 2004 | 2 |
| 1 | 2005 | 1 |
| 2 | 2004 | 1 |
| 2 | 2005 | 1 |
如果你坚持要用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
相关产品推荐
相关产品推荐

