删除 R 中包含某些字符串的所有行

标签 r string

我想从数据框中删除包含某些字符串的所有行。这些字符串(称为“abc1”、“abc2”、“abc3”等)出现在数据集中不同行的不同列下。例如,“abc1”可能出现在第 15 行的第一列中,然后出现在第 20 行的第二列中。我想删除包含任何这些字符串的所有行。我查看的解决方案基于包含相关字符串的单个变量 - 当字符串出现在多个变量下时,如何有效地执行此操作?

最佳答案

我们可以使用 filterif_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/

相关文章:

r - 如何从R中的文件读取逻辑数据

java - 实际和预期字符串具有相同的结果,但测试仍然失败,说预期 [true] 但发现 [false]

java - List<String> A = new ArrayList<String> ( ) 和 ArrayList<String> A = new ArrayList<String>() 之间有区别吗?

C#:CompareTo(String) 和 Equals(String) 有什么区别?

python - 在 R 中打开 pickled sklearn 文件

r - 如何在 R 中 gsub 一个空的 ""字符串?

java - 如何将二维字符串数组打印为字符串

java - 如何在函数上动态写入逗号字符(作为参数)?

r - 使用 networkD3 在 R 中的 Sankey 图表中进行交互

r - 使用 ggplot2 和 drc 绘制剂量 react 曲线