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

如何用分组if else筛选器剔除占比不足50%的变量关联行

问题解决:按分组筛选符合自关联占比要求的变量行

我有一份记录变量X1与X2间不同类型关联的数据集,需要按分组剔除占比低于50%的变量:

  • 判断规则:按分组计算变量自关联(X1=X2的行)的Tlinks与组内最大Tlinks的比值,若比值小于0.5,则移除所有包含该变量的行
  • 示例中A4的自关联比值(15/71≈21%)不足50%,因此要移除所有含A4的行

原始数据集:

dat <- read.table(text = "
   group X1    X2     `++`  `--`  `+-`  `-+`  `0+`  `+0`  `0-`  `-0`  `00` Tlinks
 1 52    A1    A1        0     6     0     0     0     0     0     0    65     71
 2 52    A2    A1        0     0     0     0     0     0     0     0    71     71
 3 52    A2    A2        0     0     0     0     0     0     0     0    71     71
 4 52    A3    A1        0     0     0     0     0    13     0     3    55     71
 5 52    A3    A2        0     0     0     0     0     0     0     0    71     71
 6 52    A3    A3        0    20     0     0     0     0     0     0    51     71
 7 52    A4    A1        0     0     0     0     0     0     0     0    71     71
 8 52    A4    A2        0     0     0     0     0     0     0     0    71     71
 9 52    A4    A3        0     0     0     0     0     0     0     0    71     71
10 52    A4    A4        0     0     0     0     0     0     0     0    15     15
", header = TRUE)

当前尝试的代码无法实现需求:

dat2 <- dat %>%     
group_by(group) %>%
filter(if(X1 == X2 & Tlinks/max(Tlinks) > 0.50) X1 | X2 else TRUE)

解决思路

  1. 按分组计算组内最大Tlinks值
  2. 筛选出自关联行(X1=X2),计算每个变量的Tlinks与组内最大值的比值
  3. 提取比值≥0.5的合格变量列表
  4. 保留原始数据集中X1或X2属于合格变量的行

正确代码

library(dplyr)

dat2 <- dat %>%
  group_by(group) %>%
  # 计算组内最大Tlinks
  mutate(max_tlinks = max(Tlinks)) %>%
  # 筛选自关联行,保留比值达标变量
  filter(X1 == X2, Tlinks/max_tlinks >= 0.5) %>%
  # 提取合格变量列表
  pull(X1) %>%
  # 过滤原始数据,保留含合格变量的行
  { filter(dat, X1 %in% . | X2 %in% .) }

或者更简洁的链式写法:

dat2 <- dat %>%
  group_by(group) %>%
  mutate(max_t = max(Tlinks)) %>%
  filter(X1 == X2, Tlinks/max_t >= 0.5) %>%
  distinct(X1) %>%
  pull(X1) %>%
  filter(dat, X1 %in% ., X2 %in% .)

验证结果

运行后得到的dat2与目标数据集完全一致:

#   group X1 X2 ++ -- +- -+ 0+ +0 0- -0 00 Tlinks
# 1    52 A1 A1  0  6  0  0  0  0  0  0 65     71
# 2    52 A2 A1  0  0  0  0  0  0  0  0 71     71
# 3    52 A2 A2  0  0  0  0  0  0  0  0 71     71
# 4    52 A3 A1  0  0  0  0  0 13  0  3 55     71
# 5    52 A3 A2  0  0  0  0  0  0  0  0 71     71
# 6    52 A3 A3  0 20  0  0  0  0  0  0 51     71

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 05:07:44