删除R中的特定行

时间:2018-12-11 02:37:32

标签: r regex grepl remove-if

我有一个要删除特定行的数据框。 我想删除有“Référence”字样的行和“référence”行下的3行。 在这里查看我的example

我认为我必须使用grepl函数。

谢谢您的帮助。

最大

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您可以像这样对数据进行子集删除,以删除所有带有单词Référence的行:

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

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

答案 2 :(得分:0)

您应该使用output_dim,而不是grep。使用grepl时,将获得与模式匹配的行索引,而使用grep时,将获得布尔向量。您可以这样做:

grepl

示例:

rowIndexes = grep(x = df$col1, pattern = "refer")

df = df[-c(rowIndexes, rowIndexes+1, rowIndexes+2),]

泛化

如果要在o后面的一组特定行之前删除> 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

其中rowIndexes = grep(x = df$col1, pattern = "refer") N = 2 indexesToRemove = sapply(rowIndexes, function(x){ x + (0:N) }) df = df[-indexesToRemove, ] 是整数。如果N为正,它将在带有“ refer”的行之后删除N行。如果N为负,这将删除N个先前的行。