我有几个数据帧,我想在其中删除与某个字符串匹配的每一行。我使用以下代码来执行此操作:
df[!(regexpr("abc", df$V4) ==1),]
如何删除后续行,例如如果我删除上面代码指定的行n,我怎么能另外删除行n + 1?
我的第一个尝试是简单地找出所需行的索引,但这不起作用,因为我需要删除不同长度的不同数据帧中的行。因此指数各不相同。
谢谢!
答案 0 :(得分: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 :(得分:0)
在逻辑表达式上使用which(),然后只需在结果中添加1即可。
sel <- which(grep("abc", df$V4))
sel <- c(sel, sel+1)
df[-sel,]
答案 2 :(得分:0)
df[which(!(regexpr("abc", df$V4) ==1))+c(0,1),]