删除 R 中的特定行

Remove specific rows in R

我有一个数据框,我想在其中删除特定行。 我想删除 "Référence" 单词所在的行和 "référence" 行下的 3 行。 在这里查看我的 example。

我想我必须使用 grepl 函数。

感谢您的帮助。

最大

从示例来看,您似乎想要删除带有 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 的单元格,还会删除整行!

您可以像这样对数据进行子集化,以删除包含单词 Référence:

的所有行

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

显然,用 data 代替您使用的数据框的名称。

您应该使用 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

泛化

如果要删除一组特定行之前的 o 之后的 N 行,请执行:

rowIndexes = grep(x = df$col1, pattern = "refer")
N = 2
indexesToRemove = sapply(rowIndexes, function(x){ x + (0:N) })
df = df[-indexesToRemove, ]

其中 N 是一个整数。如果 N 是正数,它将删除带有 "refer" 的行之后的 N 行。如果 N 为负,这将删除 N 前面的行。