删除 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 前面的行。
我有一个数据框,我想在其中删除特定行。 我想删除 "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 前面的行。