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

如何在R语言中统计每个ID的唯一日期数并添加至数据集?

解决方案

在R中可以通过两种常用方式实现该需求:基础R函数或tidyverse工具包,以下是具体实现:

方法一:基础R实现

使用ave()函数按ID分组,统计每组内唯一日期的数量:

# 原始数据集
ID <- c(1,1,1,2,2,3,3)
Date <- as.Date(c("2021/08/04","2021/08/05","2021/08/06",
                  "2021/08/04","2021/08/04",
                  "2021/08/04","2021/08/05"))
x <- data.frame(ID, Date)

# 添加total_num_dates列
x$total_num_dates <- ave(x$Date, x$ID, FUN = function(d) length(unique(d)))

# 查看结果
print(x)

输出结果:

ID       Date total_num_dates
1  1 2021-08-04               3
2  1 2021-08-05               3
3  1 2021-08-06               3
4  2 2021-08-04               1
5  2 2021-08-04               1
6  3 2021-08-04               2
7  3 2021-08-05               2

方法二:tidyverse(dplyr)实现

如果习惯使用tidyverse语法,用dplyr的分组和突变函数更直观:

library(dplyr)

# 基于原始数据集x处理
x <- x %>%
  group_by(ID) %>%
  mutate(total_num_dates = n_distinct(Date)) %>%
  ungroup()

# 查看结果
print(x)

此方法会得到和基础R完全一致的输出。

关键说明

  • ave()函数:基础R中用于分组计算的工具,第一个参数是待处理的向量,第二个是分组变量,FUN指定分组内的计算逻辑(这里用length(unique(d))统计唯一值数量)。
  • n_distinct():dplyr中的函数,直接返回向量中唯一值的数量,配合group_by()实现分组统计。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:05:31