如何用Tidyverse筛选不含特定精确值的所有行?
解决方案:筛选不含精确值"c"的行
首先给出示例数据框:
df <- data.frame(A = c('a', 'b', 'c'), B = c('c','d','e')) df # A B # 1 a c # 2 b d # 3 c e
原代码筛选包含"c"的行:
library(tidyverse) df %>% filter_all(any_vars(. == "c")) # A B # 1 a c # 2 c e
要实现反向筛选(所有行的所有列都不含精确值"c"),可以用以下两种Tidyverse方案:
方案1:使用filter_all + all_vars
利用all_vars确保每一行的所有变量都不等于"c":
df %>% filter_all(all_vars(. != "c")) # A B # 1 b d
方案2:推荐使用if_all(现代Tidyverse写法)
filter_all已被软弃用,更推荐使用if_all配合everything()指定所有列,逻辑一致:
df %>% filter(if_all(everything(), ~ .x != "c")) # A B # 1 b d
两种方法都实现了精确匹配,仅保留所有列的值完全不等于"c"的行,符合需求。
内容的提问来源于stack exchange,提问作者Ben S.
相关产品推荐
相关产品推荐

