我有一个这样的表
A列 | B列 | C列 | D列 | x | 1 | k1 | B
---|---|---|---|
k | 2 | k2 | |
z | 3 | k3 | |
y | 4 | k4 |
我们可以使用if_any
和str_detect
library(dplyr)
library(stringr)
df1 %>%
filter(if_any(everything(), ~ str_detect(.x, 'A|3|y')))
与产出
ColumnA ColumnB ColumnC ColumnD
1 A x 1 k1
2 C z 3 k3
3 D y 4 k4
或使用base R
与非正则表达式解决方案
subset(df1, Reduce(`|`, lapply(df1, (x) x %in% c('A', 3, 'y'))))
ColumnA ColumnB ColumnC ColumnD
1 A x 1 k1
3 C z 3 k3
4 D y 4 k4
数据df1 <- structure(list(ColumnA = c("A", "B", "C", "D"), ColumnB = c("x",
"k", "z", "y"), ColumnC = 1:4, ColumnD = c("k1", "k2", "k3",
"k4")), class = "data.frame", row.names = c(NA, -4L))
vec <- c('A', 3, 'y')
df[rowsum(+(as.matrix(df) %in% vec), c(row(df)))>0,]
ColumnA ColumnB ColumnC ColumnD
1 A x 1 k1
3 C z 3 k3
4 D y 4 k4
另一种方法是使用regex:
df[grepl(sprintf('\b(%s)\b', paste0(vec, collapse = '|')), do.call(paste, df)), ]
ColumnA ColumnB ColumnC ColumnD
1 A x 1 k1
3 C z 3 k3
4 D y 4 k4