如何在数据框中删除第n行和n+1行?

3

我有几个数据框,想要删除其中每一行匹配特定字符串的数据。我使用了以下代码进行操作:

 df[!(regexpr("abc", df$V4) ==1),]

如何删除下一行,例如,如果我按照上面的代码指定删除第n行,我还怎样删除n+1行?

我的第一个尝试是简单地查找所需行的索引,但这不起作用,因为我需要删除长度不同的不同数据帧中的行。因此,这些索引会有所不同。

谢谢!

3个回答

1
我建议直接取出和操作逻辑向量。假设我们有以下向量:
x = c(5,0,1, 4, 3)

我们想要做的是:

x[x > 3]

首先,注意:

R> (s_n = x>3)
[1]  TRUE FALSE FALSE  TRUE FALSE

所以

R> (s_n1 = as.logical(s_n + c(F, l[1:(length(s_n)-1)])))
[1]  TRUE  TRUE FALSE  TRUE  TRUE

因此,
x[s_n1]

提供您所需的内容。


在您的具体示例中,可以这样做:
s_n = !(regexpr("abc", df$V4) == 1)
s_n1 = as.logical(s_n + c(F, l[1:(length(s_n)-1)])))
df[s_n1, ]

应该可以工作。


1
同意这个逻辑,但如果您使用一个不同的符号来表示逻辑向量,可读性会有所提高。孤立的字母'l'在我浏览器上使用的字体中与'1'太相似了。 - IRTFM

0
使用 which() 函数对逻辑表达式进行操作,然后将结果加 1 即可。
sel <- which(grep("abc", df$V4))
sel <- c(sel, sel+1)
df[-sel,]

所以,在朋友的帮助下,我最终得到了这段代码,基本上就是你建议的:del <- c(which(regexpr("abc", df$V4) ==1),(which(regexpr("abc", df$V4) ==1)+1)) df2 <- df[-del,] - kat

0
df[which(!(regexpr("abc", df$V4) ==1))+c(0,1),]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接