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