在R中过滤循环内的多个数据帧列

在R中过滤循环内的多个数据帧列,r,dataframe,dplyr,R,Dataframe,Dplyr,我想使用循环来过滤数据帧的多个列,删除特定列表中任何给定列值所在的行 例如: > my_df <- data.frame(word1 = c("one", "two", "red", "blue"), word2 = c("apple","orange","banana","pear"), word3 = c("re

我想使用循环来过滤数据帧的多个列,删除特定列表中任何给定列值所在的行

例如:

> my_df <- data.frame(word1 = c("one", "two", "red", "blue"), word2 = c("apple","orange","banana","pear"), word3 = c("red", "orange", "yellow", "green"))
> color_words = c("red", "orange", "yellow", "green", "blue")
> my_df
  word1  word2  word3
1   one  apple    red
2   two orange orange
3   red banana yellow
4  blue   pear  green
我第一次尝试在循环中执行此筛选是:

col_names <- c("word1","word2")
for(col in col_names){
    my_df <- my_df %>% filter(!col %in% color_words)
}
> my_df
  word1  word2  word3
1   one  apple    red
2   two orange orange
3   red banana yellow
4  blue   pear  green

for(列名称中的列){
my_df%过滤器(!UQ(col)%in%颜色词)
}
>我的
单词1单词2单词3
一个苹果红
2两个橙子
3红香蕉黄
4蓝梨绿

通过循环进行过滤的正确方法是什么?

您不需要循环,您可以使用跨
过滤器
为多列应用函数

library(dplyr)
my_df %>% filter(across(all_of(col_names), ~!. %in% color_words))

#  word1 word2 word3
#1   one apple   red
如果您有较旧版本的
dplyr
,请使用
filter\u,网址为

my_df %>% filter_at(col_names, all_vars(!. %in% color_words))

您不需要循环,您可以使用
filter
over
将函数应用于多列

library(dplyr)
my_df %>% filter(across(all_of(col_names), ~!. %in% color_words))

#  word1 word2 word3
#1   one apple   red
如果您有较旧版本的
dplyr
,请使用
filter\u,网址为

my_df %>% filter_at(col_names, all_vars(!. %in% color_words))
使用
base

my_df使用
base


对不起,我的问题不清楚,但一般来说,我不想筛选所有列,只想筛选特定列表中的列(在本例中为
列名称
),谢谢。我仍然很好奇为什么我使用循环的尝试都不起作用?对不起,我的问题不清楚,但一般来说,我不想筛选所有列,只想筛选特定列表中的列(在本例中为
col\u names
)。谢谢。我仍然很好奇为什么我使用循环的尝试都没有成功?
my_df %>% filter_at(col_names, all_vars(!. %in% color_words))