2012-06-13 100 views
3

我有几个数据帧,我想删除每个匹配某个字符串的行。我用下面的代码来做到这一点:如何删除数据帧中的第n行和第n + 1行?

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

我怎样可以删除以下行,如如果我删除了上面代码所指定的第n行,那我该如何删除第n + 1行呢?

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

谢谢!

回答

0

在你的逻辑表达式中使用which(),然后你可以给结果加1。

sel <- which(grep("abc", df$V4)) 
sel <- c(sel, sel+1) 
df[-sel,] 
+0

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

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

1+与逻辑同意,但如果你使用了不同的符号你的逻辑矢量可读性会得到改善。至少在我上面的浏览器中使用的字体中,孤立字母'l'与'1'非常相似。 –

+0

@Dwin好点 – csgillespie

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