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

如何用dplyr筛选成员数超过n的分组?

解决方案

错误原因

你当前的代码用row_number() > 3是筛选每个分组内位置大于3的行,而非筛选整个分组的成员数量超过3的组,所以只得到了单条数据。

dplyr 解决方案

使用n()函数获取当前分组的总成员数,在filter()中判断该值是否大于临界值,即可选中整个符合条件的分组:

library(dplyr)

# 先修正数据框的长度不一致问题(原代码中ID长度13,Sequ长度14)
df <- data.frame(
  ID = letters[1:14],
  Sequ = c(NA,1,1,1,2,3,3,3,NA,NA,4,4,4,4)
)

# 筛选成员数超过3的分组
df %>%
  group_by(Sequ) %>%
  filter(n() > 3) %>%
  ungroup() # 可选,取消分组状态,返回普通数据框

执行后会输出整个Sequ=4的分组:

ID Sequ
1   k    4
2   l    4
3   m    4
4   n    4

如果需要排除NA的分组(即使NA组的成员数超过3),可以在filter()中增加判断:

df %>%
  group_by(Sequ) %>%
  filter(n() > 3 & !is.na(Sequ)) %>%
  ungroup()

其他解决方案

Base R 实现

# 统计每个Sequ的成员数
sequ_counts <- table(df$Sequ)
# 筛选成员数超过3的Sequ值
target_sequ <- as.numeric(names(sequ_counts[sequ_counts > 3]))
target_sequ <- target_sequ[!is.na(target_sequ)]
# 提取对应分组
subset(df, Sequ %in% target_sequ)

data.table 实现

library(data.table)
setDT(df)[, if(.N > 3) .SD, by = Sequ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:39:40