Удалить определенные строки в R

У меня есть датафрейм, где я хотел бы удалить определенные строки. Я хотел бы удалить строку, в которой есть слово "Référence" и 3 строки под строкой "Référence". Смотрите мой пример здесь.

Я думаю, что я должен использовать функцию grepl.

Спасибо за помощь.

Максимум.

3 ответа

Вы можете поместить данные таким образом, чтобы удалить все строки со словом Référence:

data <-data [! (data $ column1 == "Référence"),]

Очевидно, замена data для имени вашего dataframe вашего использования.

Из примера кажется, что вы хотите удалить строки с NA. Это легко сделать с помощью na.omit:

df <- data.frame(
  x = c(NA, 1, 2, 3, 4),
  y = c(10, NA, 18, 22, NA)
)
df
   x  y
1 NA 10
2  1 NA
3  2 18
4  3 22
5  4 NA

Теперь опустите все строки с пропущенными значениями:

df2 <- na.omit(df)
df2
  x  y
3 2 18
4 3 22

Обратите внимание, что na.omit удаляет не только клетки с NA, но и весь ряд!

Вы должны использовать 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 предыдущих строк.

Другие вопросы по тегам