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

R语言不使用dplyr包筛选含多个个体分组的实现方法

R 基础操作:无dplyr依赖筛选符合独立个体数要求的分组

问题背景

现有数据集规则如下:

  • 每个分组包含1或2个独立个体
  • 单个个体可能对应多条数据条目
    示例数据构造代码:
group<-c(1,1,1,1,2,2,3,3,3,3,4,4)
individualID<-c(1,1,2,2,3,3,5,5,6,6,7,7)
X<-rbinom(12,1,0.5)
df1<-data.frame(group,individualID,X)

示例数据输出:

> df1
   group individualID X     
1      1            1  0 
2      1            1  1 
3      1            2  1 
4      1            2  1 
5      2            3  1 
6      2            3  1 
7      3            5  1 
8      3            5  1 
9      3            6  1 
10     3            6  1 
11     4            7  0 
12     4            7  1 

统计各分组独立个体数的基础代码:

aggregate(data = df1,  individualID ~ group, function(x) length(unique(x)))

统计结果:

group individualID 
1 1    2
2 2    1
3 3    2
4 4    1

需求

不依赖dplyr包,仅保留分组内独立个体数>1的分组(即保留分组1、3的所有数据,删除分组2、4的所有数据)

实现方案

方案1:分步骤筛选(可读性高)

  1. 先统计每个分组的独立个体数量,生成统计表
group_ind_count <- aggregate(individualID ~ group, df1, function(x) length(unique(x)))
  1. 筛选出符合要求(独立个体数>1)的分组编号
target_groups <- group_ind_count$group[group_ind_count$individualID > 1]
  1. 从原数据中提取对应分组的所有行
result <- df1[df1$group %in% target_groups, ]

方案2:单行实现(用ave函数,代码更简洁)

直接通过ave函数为每行生成分组对应的独立个体数,用逻辑条件直接筛选:

result <- df1[ave(df1$individualID, df1$group, FUN = function(x) length(unique(x))) > 1, ]

输出验证

两种方案得到的结果一致,均仅保留分组1和3的全部8条数据:

> result
   group individualID X
1      1            1 0
2      1            1 1
3      1            2 1
4      1            2 1
7      3            5 1
8      3            5 1
9      3            6 1
10     3            6 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:57:04