Вы должны использовать grep
, а не grepl
.Когда вы используете grep
, вы получаете индексы строк, которые соответствуют шаблону, в то время как с grepl
вы получаете логический вектор.Вы можете сделать:
rowIndexes = grep(x = df$col1, pattern = "refer")
df = df[-c(rowIndexes, rowIndexes+1, rowIndexes+2),]
Пример:
> df
a b c d e
1 00100 44 5 69 fr
2 refer 34 35 7 df
3 thisalso 46 15 167 as
4 thistoo 46 15 167 as
5 00100 11 5 67 uu
6 00100 563 25 23 tt
7 00100 44 5 69 fr
8 refer 34 35 7 df
9 thisalso 46 15 167 as
10 thistoo 11 5 67 uu
11 00100 563 25 23 tt
12 00100 44 5 69 fr
13 refer 34 35 7 df
14 thisalso 46 15 167 as
15 thistoo 11 5 67 uu
16 00100 563 25 23 tt
17 00100 563 25 23 tt
18 00100 563 25 23 tt
> rowIndexes = grep(x = df$col1, pattern = "refer")
> df = df[-c(rowIndexes, rowIndexes+1, rowIndexes+2),]
> df
a b c d e
1 00100 44 5 69 fr
5 00100 11 5 67 uu
6 00100 563 25 23 tt
7 00100 44 5 69 fr
11 00100 563 25 23 tt
12 00100 44 5 69 fr
16 00100 563 25 23 tt
17 00100 563 25 23 tt
18 00100 563 25 23 tt
Обобщение
Если вы хотите удалить N
строк после o перед набором конкретных строк, выполните:
rowIndexes = grep(x = df$col1, pattern = "refer")
N = 2
indexesToRemove = sapply(rowIndexes, function(x){ x + (0:N) })
df = df[-indexesToRemove, ]
, где N
- целое число.Если N положительно, оно удалит N строк после строк с «ссылкой».Если N отрицательно, это удалит N предыдущих строк.