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

使用filter_all()排除含指定值的行失效,求助解决方案

解决filter_all排除含指定值行的问题

问题原因

你原代码里的. != c("s", "u")是向量循环匹配逻辑,并非判断值是否属于目标集合。R会把c("s","u")循环对应到每个变量,导致判断出错——比如第二行的V2="s"会和"u"比较(循环到第二个元素),结果为TRUE;V3="e"又和"s"比较,结果也为TRUE,整行因此被错误保留。

正确写法

方法1:用%in%判断集合归属(兼容filter_all)

把!=换成! . %in%,明确检查当前值是否不在指定集合里,再配合all_vars()确保所有变量都满足条件:

test <- tibble(V1 = c("a", "b", "d", "f"), 
               V2 = c("a", "s", "d", "g"), 
               V3 = c("s", "e", "r", "u"))

test %>% filter_all(all_vars(!. %in% c("s", "u")))

输出结果:

# A tibble: 1 × 3
  V1    V2    V3   
  <chr> <chr> <chr>
1 d     d     r    

方法2:用dplyr推荐的across语法(替代filter_all)

filter_all属于旧语法,现在dplyr更推荐用across配合everything()指定所有变量,写法更清晰:

test %>% filter(across(everything(), ~ !.x %in% c("s", "u")))

运行结果和方法1完全一致,这也是符合当前dplyr规范的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:57:20