如何在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
相关产品推荐
相关产品推荐

