是否有一个函数来过滤包含字符串的行,但在 R 中包含给定字符串的选定列名称上?

M.w*_*wol 1 r filter multiple-columns conditional-statements

我会尽量具体。我从 Web 应用程序中获取了大量数据集。我下载的每个数据集的列数可能会有所不同。我想过滤我的数据以查找异常值。所以我准备了一个清单:

outl <- c("God","Devil","Priest")
Run Code Online (Sandbox Code Playgroud)

现在让我们假设这是我的 df:

ID <- c(1,2,3,4)
Actor1<- c("Driver","","","")
Actor2<- c("President","Zombie","","")
Actor3<- c("CEO","Devil","","")
Actor4<-c("Priest","","Killer","Mayor")
Leng<- c(12,42,42,22)
Genre<-c("horror","criminal","drama","comedy")
df_ex <-data.frame(ID, Actor1, Actor2, Actor3, Actor4, Leng, Genre)
Run Code Online (Sandbox Code Playgroud)

我想过滤包含名称为“Actor”的任何列中异常值名称的行 ID(可能有 100 个,这就是为什么我不能使用 OR 运算符执行此操作的原因),例如:

df_ex %>%
  filter(*anycolumn that contains string "Actor"* %in% outl)
Run Code Online (Sandbox Code Playgroud)

我希望得到 ID 为 1 和 2 的行

希望这足够清楚,提前致谢

Ben*_*Ben 5

您可以使用filter_at基于特定选定变量(在这种情况下,以“Actor”开头的变量)进行专门过滤。

library(tidyverse)

df_ex %>%
  filter_at(vars(starts_with("Actor")), any_vars(. %in% outl))
Run Code Online (Sandbox Code Playgroud)

输出

  ID Actor1    Actor2 Actor3 Actor4 Leng    Genre
1  1 Driver President    CEO Priest   12   horror
2  2           Zombie  Devil          42 criminal
Run Code Online (Sandbox Code Playgroud)