我有幾個數據幀,我想刪除每個匹配某個字符串的行。我用下面的代碼來做到這一點:如何刪除數據幀中的第n行和第n + 1行?
df[!(regexpr("abc", df$V4) ==1),]
我怎樣可以刪除以下行,如如果我刪除了上面代碼所指定的第n行,那我該如何刪除第n + 1行呢?
我的第一個嘗試是簡單地找出所需行的索引,但這不起作用,因爲我需要刪除不同長度的不同數據框中的行。所以指數有所不同。
謝謝!
我有幾個數據幀,我想刪除每個匹配某個字符串的行。我用下面的代碼來做到這一點:如何刪除數據幀中的第n行和第n + 1行?
df[!(regexpr("abc", df$V4) ==1),]
我怎樣可以刪除以下行,如如果我刪除了上面代碼所指定的第n行,那我該如何刪除第n + 1行呢?
我的第一個嘗試是簡單地找出所需行的索引,但這不起作用,因爲我需要刪除不同長度的不同數據框中的行。所以指數有所不同。
謝謝!
在你的邏輯表達式中使用which(),然後你可以給結果加1。
sel <- which(grep("abc", df$V4))
sel <- c(sel, sel+1)
df[-sel,]
我建議直接取出並操作邏輯向量。假設我們有載體:
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'非常相似。 –
@Dwin好點 – csgillespie
df[which(!(regexpr("abc", df$V4) ==1))+c(0,1),]
所以,在朋友的幫助下,我得到了這個代碼,這基本上就是你所建議的:'del < - c(which(regexpr(「abc」,df $ V4)== 1) ,(which(regexpr(「abc」,df $ V4)== 1)+1)) \t df2 < - df [-del,]' – kat