2012-06-13 97 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),] 
相關問題