按数据框中是不是存在字符串过滤行
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
的工作原理吗?好吧,那就没什么好解释的了..这也是一个老问题..只是通过看看我错过了什么。以上是关于按数据框中是不是存在字符串过滤行的主要内容,如果未能解决你的问题,请参考以下文章