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

在R中统计各ID下唯一活动数的实现方法

统计每个ID下唯一活动数并添加到原数据框

原始数据集

ID <- c(1001,1001, 1001, 1002,1002,1002)
activity <- c(123,123,123, 456,456,789)
df <- data.frame(ID,activity)

需求说明

需要统计每个ID对应的唯一activity数量,并将该统计结果作为新列N添加到原数据框中,最终得到如下形式的输出:

N <- c(1,1,1,2,2,2)
data.frame(df,N)

其中ID为1001的用户仅参与1种活动,ID为1002的用户参与2种活动。

解决方案

方法1:使用aggregate函数

先通过aggregate统计每个ID的唯一活动数,再合并回原数据框:

# 统计每个ID的唯一activity数量
count_df <- aggregate(activity ~ ID, data = df, FUN = function(x) length(unique(x)))
colnames(count_df)[2] <- "N"

# 合并到原数据框并保持原顺序
result_df <- merge(df, count_df, by = "ID")
result_df <- result_df[order(match(result_df$ID, df$ID)), ]
rownames(result_df) <- NULL

print(result_df)

方法2:使用dplyr包(简洁直观)

借助tidyverse生态的dplyr包,通过分组后直接添加新列:

library(dplyr)

result_df <- df %>%
  group_by(ID) %>%
  mutate(N = n_distinct(activity)) %>%
  ungroup()

print(result_df)

方法3:使用data.table包(大数据高效处理)

如果处理的是大型数据集,data.table的操作效率更高:

library(data.table)

setDT(df)[, N := uniqueN(activity), by = ID]
print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:40:54