如何在R语言中按ID提取color列唯一值并添加计数列?
按ID保留唯一颜色并添加颜色计数的R实现方案
原始数据集
ID <- c(1,1,1,1,1,1,1,2,2,2,2,2) color <- c("red","red","red","blue","green","green","blue", "yellow","red","red","blue","green") df <- data.frame(ID,color)
解决方案一:基于dplyr的链式操作
直接通过分组去重+分组赋值完成需求,代码简洁高效:
library(dplyr) df_result <- df %>% # 按ID+color分组,仅保留每组首行实现去重 group_by(ID, color) %>% slice(1) %>% ungroup() %>% # 按ID分组,计算当前ID的唯一颜色总数并赋值给n_color group_by(ID) %>% mutate(n_color = n_distinct(color)) %>% ungroup() %>% # 按ID排序匹配目标格式 arrange(ID)
解决方案二:先统计计数再关联去重数据
如果更习惯分步操作,可以拆分统计和关联两步:
library(dplyr) # 第一步:统计每个ID对应的唯一颜色数量 color_count <- df %>% group_by(ID) %>% summarize(n_color = n_distinct(color)) %>% ungroup() # 第二步:对原始数据去重后关联计数表 df_result <- df %>% # 保留ID+color的唯一组合 distinct(ID, color, .keep_all = TRUE) %>% # 关联计数表添加n_color列 left_join(color_count, by = "ID") %>% arrange(ID)
验证结果
运行上述代码后,df_result将完全匹配目标数据集:
print(df_result) # ID color n_color # 1 1 red 3 # 2 1 blue 3 # 3 1 green 3 # 4 2 yellow 4 # 5 2 red 4 # 6 2 blue 4 # 7 2 green 4
内容的提问来源于stack exchange,提问作者Bruh
相关产品推荐
相关产品推荐

