按数据框中是不是存在字符串过滤行

Posted

技术标签:

【中文标题】按数据框中是不是存在字符串过滤行【英文标题】:Filter rows by presence of string in dataframe按数据框中是否存在字符串过滤行 【发布时间】:2018-07-12 05:31:49 【问题描述】:

这个问题与Delete rows containing specific strings in R 和R, remove row if there is a certain character 相似,但不重复。问题是如果数据帧中行中的任何位置存在字符串,如何删除该行,而无需在函数中写入列的名称。 编辑:如果目标是保留这些行,请在答案中删除 !

【问题讨论】:

通常使用的术语是 'filter',如 'filter rows where string present/not present...' 【参考方案1】:

你可以这样做。

删除所有包含“bee”的行

df <- data.frame(c("a", "c", "d", "h"),c("bee","f","g","i"))

df<-df[apply(df,1,function(rowdata)
  !any(grepl("bee", rowdata))
  ),]

正如@Ferraoo 上面指出的那样,为了只保留包含“bee”的行,请删除!(在这种情况下代表“not”)。

如果您希望保留每个值都包含“bee”的行,您可以使用all() 而不是any()

【讨论】:

从技术上讲,您不希望在数据中执行 forloop,以便能够计算包含蜜蜂的行然后将其删除。这对计算机来说很乏味。你可以像df[!grepl("bee",do.call(paste,df)),] 这行得通,但我不太明白 do.call 和 paste 是如何协同工作的,您可以考虑发布一个新答案,我个人很乐意解释它为什么起作用:) 哈哈。你知道do.call 的工作原理吗?好吧,那就没什么好解释的了..这也是一个老问题..只是通过看看我错过了什么。

以上是关于按数据框中是不是存在字符串过滤行的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法检查字符串是不是存在于另一个数据框中?

Python,“过滤”行编辑,按字符读取标准输入,没有回声

按字符串过滤块

熊猫数据框 - 按字符串过滤/选择列是不是保留顺序?

如何在包含子字符串的数据框中查找所有行?

过滤后跟随机数字行的字符串