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

如何过滤R语言分组DataFrame中特定值计数超标的组

解决方案:移除组内lapse == 2计数超15的ID分组

需求说明

基于生成的示例DataFrame,按ID列分组后,完全移除所有组内lapse == 2出现次数超过15的ID对应的所有行。

方法一:直接分组筛选(推荐)

通过dplyr的分组+筛选一步完成,代码简洁高效:

library(dplyr)

# 生成示例数据
data <- data.frame(ID = sample(c("A","B","C","D"),100,replace = T), 
                   rt = runif(100,0.2,1),
                   lapse = sample(1:2,100,replace = T))

# 筛选符合条件的分组
filtered_data <- data %>%
  group_by(ID) %>%
  filter(sum(lapse == 2) <= 15) %>% # 计算组内lapse==2的数量,保留≤15的分组
  ungroup() # 可选:取消分组状态,避免后续操作受分组影响

方法二:先统计计数再筛选

适合需要保留分组计数结果的场景:

# 第一步:统计每个ID的lapse==2计数并筛选有效ID
valid_id_stats <- data %>%
  group_by(ID) %>%
  summarise(lapse2_count = sum(lapse == 2)) %>%
  filter(lapse2_count <= 15)

# 第二步:从原数据中筛选有效ID的行
filtered_data <- data %>%
  inner_join(valid_id_stats, by = "ID") %>%
  select(-lapse2_count) # 移除临时计数列

基于你提供的初步代码扩展

如果要基于你写出的分组计数代码完成筛选,可以这样做:

# 从分组计数结果中提取符合条件的ID
valid_ids <- data %>%
  group_by(ID) %>%
  count(lapse == 2) %>%
  filter(`lapse == 2` == TRUE, n <= 15) %>% # 定位lapse==2的计数行,筛选≤15的ID
  pull(ID) # 提取ID向量

# 用有效ID过滤原数据
filtered_data <- data %>%
  filter(ID %in% valid_ids)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:41:33