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

在R中按字符型ID分组计数并保留原表的实现方法

解决R语言中字符型ID分组计数且保留原表结构的问题

核心问题分析

你之前的代码存在两个关键问题:

  • summarise 是聚合类函数,会将每个分组压缩为单行,必然导致原数据表折叠
  • sum(id) 完全不适用于字符型变量,sum 是针对数值的求和函数,对字符ID无效

正确实现方法

要在保留原表所有行的前提下,为每个ID分组添加计数列,推荐使用 dplyr 包的 mutate 配合 n() 函数(n() 可返回当前分组的总行数):

library(dplyr)

# 给原数据框新增count列,记录每个id分组的行数
d <- d %>% 
  group_by(id) %>% 
  mutate(count = n()) %>% 
  ungroup()  # 取消分组状态,避免后续操作受分组约束

运行后数据会和你期望的示例结果完全一致:每个ID对应的所有行都会带上该分组的总行数。

Base R 替代方案

如果不想依赖dplyr,也可以用base R的 ave 函数实现:

# 直接给原数据框添加count列
d$count <- ave(rep(1, nrow(d)), d$id, FUN = length)

后续筛选示例

新增count列后,可基于分组行数进行数据筛选,比如只保留分组行数≥2的数据:

# dplyr方式
filtered_data <- d %>% filter(count >= 2)

# base R方式
filtered_data <- d[d$count >= 2, ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 13:07:03