根据下一行条件删除R中的一行

Fel*_*lle 9 r

我有以下问题:

我有一个大数据框,我想删除与此条件匹配的每一行:如果列内的值(字符串)包含“:”字符,而下一行还包含“:”字符,它将删除第一个。

像这样的东西:

a <- c("value1","value2","value2:a","value2:b","value3")
b <- c(1,2,3,4,5)
df1 <- data.frame(b,a)

  b        a
1 1   value1
2 2   value2
3 3 value2:a
4 4 value2:b
5 5   value3
Run Code Online (Sandbox Code Playgroud)

对此,只有包含名称“value2:a”的行被删除,因为后跟包含正则表达式“:”的行

a        b
value1   1
value2   2
value2:b 4
value3   5
Run Code Online (Sandbox Code Playgroud)

非常感谢您,我一直在尝试使用 for 循环和 grepl 函数的一些解决方案,但似乎无法使其工作。

All*_*ron 6

您不需要为此循环。您可以通过将 agrepl与滞后grepl

df1[!c(head(grepl(":", df1$a), -1) & tail(grepl(":", df1$a), -1), FALSE),]
#>   b        a
#> 1 1   value1
#> 2 2   value2
#> 4 4 value2:b
#> 5 5   value3
Run Code Online (Sandbox Code Playgroud)

  • `setDT(df1)[!c(head(grepl(":", a), -1) &amp; tail(grepl(":", a), -1), FALSE)]` 是一个 `data.table`解决方案。(OP说他的数据很大) (3认同)