提问人:user3091668 提问时间:3/7/2014 最后编辑:Tunakiuser3091668 更新时间:6/22/2022 访问量:244240
删除 R 中包含特定字符串的行
Delete rows containing specific strings in R
问:
我想排除包含字符串“REVERSE”的行,但我的行与单词不完全匹配,只包含它。
我的输入数据框:
Value Name
55 REVERSE223
22 GENJJS
33 REVERSE456
44 GENJKI
我的预期输出:
Value Name
22 GENJJS
44 GENJKI
答:
125赞
Pop
3/7/2014
#1
这应该可以解决问题:
df[- grep("REVERSE", df$Name),]
或者更安全的版本是:
df[!grepl("REVERSE", df$Name),]
评论
6赞
Jason Melo Hall
1/25/2017
“更安全”是什么意思?
0赞
nemja
8/11/2017
如果我想删除包含“(”的行怎么办。以下方法似乎不起作用:df[!grepl(“(”, df$Name),]
2赞
cuttlefish
10/12/2017
@nemja 该函数使用正则表达式进行匹配,其语法 where 是有意义的。如果设置了命名参数,则将在不使用正则表达式的情况下执行文本匹配,这应该适用于您的用例。grepl
(
fixed = TRUE
grepl
3赞
shantanu pathak
8/30/2018
@JasonMeloHall减号 (-) 运算符使用负索引,否定 (!) 运算符使用逻辑索引,因此否定运算符比减号(-)更安全
0赞
KNN
2/26/2019
您如何修改它以删除包含匹配字符串的行上方的行?
6赞
bartektartanus
3/13/2014
#2
您可以使用软件包中的stri_detect_fixed函数stringi
stri_detect_fixed(c("REVERSE223","GENJJS"),"REVERSE")
[1] TRUE FALSE
21赞
BobD59
11/8/2014
#3
实际上我会使用:
df[ grep("REVERSE", df$Name, invert = TRUE) , ]
这将避免在任何行中都不包含所需的搜索词时删除所有记录。
31赞
sbha
3/29/2018
#4
您可以使用并否定匹配项:dplyr::filter()
grepl()
library(dplyr)
df %>%
filter(!grepl('REVERSE', Name))
或者使用并否定匹配项:dplyr::filter()
stringr::str_detect()
library(stringr)
df %>%
filter(!str_detect(Name, 'REVERSE'))
评论
2赞
micstr
8/14/2018
这个问题要求很多字符串。那么,如果您想删除多个字符串,会发生什么,即remove.list <- c("REVERSE", "FOO", "BAR, "JJ")
1赞
sbha
8/14/2018
当然,您可以像这样创建列表: 然后像这样过滤:remove.list <- paste(c("REVERSE", "FOO", "BAR", "JJ"), collapse = '|')
df %>% filter(!grepl(remove.list, Name))
df %>% filter(!str_detect(Name, remove.list))
0赞
CelloRibeiro
7/4/2022
如何删除基于两列中存在的字符串的行,例如,我尝试这种方式时遇到了以下错误。filter(!grepl('REVERSE', Name & 'BAR', Name))
! operations are possible only for numeric, logical or complex types
3赞
Mohamed Rahouma
10/4/2019
#5
您可以使用前面提供的代码在同一个 datafram (df) 中使用它
df[!grepl("REVERSE", df$Name),]
或者,您可以使用此代码为 DataFRAM 分配不同的名称
df1<-df[!grepl("REVERSE", df$Name),]
4赞
hidden-layer
7/23/2020
#6
如果是多个字符串,则可以使用此函数df[!grepl("REVERSE|GENJJS", df$Name),]
1赞
sbooth
6/22/2022
#7
基于 BobD59 和隐藏层的响应的迟到答案。
这将删除多个特定字符串,同时避免在任何行中都不包含所需的搜索词时删除所有记录。
df1 <-
df[!grepl("REVERSE|GENJJS", df$Name), (invert = TRUE), ]
评论