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

动态过滤DataFrame:删除至少两列值相等的行

动态过滤DataFrame:保留所有列值均不重复的行

需求说明

需要动态过滤DataFrame,仅保留所有列值均不相等的行(即删除任意至少两列值相等的行);后续会增加列数,需实现类似mutate(across())的动态处理逻辑,无需因列数变化修改代码。

示例数据

# 构建示例DataFrame
df <- data.frame(
  Var1 = c(1,1,1,2,3,4,4),
  Var2 = c(1,2,6,8,2,5,4),
  Var3 = c(1,3,5,6,7,5,6)
)

原始数据输出:

Var1 Var2 Var3
1    1    1    1
2    1    2    3
3    1    6    5
4    2    8    6
5    3    2    7
6    4    5    5
7    4    4    6

期望过滤结果

Var1 Var2 Var3
2    1    2    3
3    1    6    5
4    2    8    6
5    3    2    7

解决方案(动态适配列数)

使用dplyr包的rowwise()结合c_across()实现动态处理,代码如下:

library(dplyr)

# 动态过滤逻辑
df_filtered <- df %>%
  rowwise() %>%
  # 检查当前行所有列的去重值数量是否等于总列数(即所有值无重复)
  filter(n_distinct(c_across(everything())) == ncol(df)) %>%
  ungroup()

逻辑说明

  • c_across(everything()):动态捕获DataFrame的所有列,无需手动指定列名,适配后续列数增加的场景
  • n_distinct():计算当前行所有列值的去重数量,若等于总列数ncol(df),说明该行所有列值均不重复
  • rowwise() + ungroup():确保按行进行计算,处理完成后恢复DataFrame的常规结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 10:15:09