动态过滤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
相关产品推荐
相关产品推荐

