我想从数据框中删除包含某些字符串的所有行。这些字符串(称为“abc1”、“abc2”、“abc3”等)出现在数据集中不同行的不同列下。例如,“abc1”可能出现在第 15 行的第一列中,然后出现在第 20 行的第二列中。我想删除包含任何这些字符串的所有行。我查看的解决方案基于包含相关字符串的单个变量 - 当字符串出现在多个变量下时,如何有效地执行此操作?
最佳答案
我们可以使用 filter
和 if_any
来循环字符类列,使用 str_detect
检查元素是否有 abc 后跟任何数字, 取反 (!
),以便我们返回没有任何这些元素的行
library(dplyr)
library(stringr)
df1 %>%
filter(!if_any(where(is.character), ~ str_detect(.x, "^abc\\d+")))
-输出
col1 col2 col3
1 ac2 3 5d
2 4d 4 3c
或者使用基础R
subset(df1, !Reduce(`|`, lapply(Filter(is.character, df1),
grepl, pattern = "^abc\\d+")))
col1 col2 col3
3 ac2 3 5d
4 4d 4 3c
或者也可以
subset(df1, !grepl("abc\\d+", do.call(paste, df1)))
col1 col2 col3
3 ac2 3 5d
4 4d 4 3c
数据
df1 <- structure(list(col1 = c("abc1", "xyz1", "ac2", "4d"), col2 = 1:4,
col3 = c("1d", "abc3", "5d", "3c")), class = "data.frame", row.names = c(NA,
-4L))
关于删除 R 中包含某些字符串的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75576171/