3

特定の文字列に一致する各行を削除したいデータフレームがいくつかあります。私はそれを行うために次のコードを使用しました:

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

次の行を削除するにはどうすればよいですか。たとえば、上記のコードで指定された行 n を削除した場合、さらに行 n+1 を削除するにはどうすればよいですか?

私の最初の試みは、単に目的の行のインデックスを見つけることでしたが、長さが異なるさまざまなデータフレームの行を削除する必要があるため、うまくいきません。そのため、指数は異なります。

ありがとう!

4

3 に答える 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, ]

動作するはずです。

于 2012-06-13T12:26:43.220 に答える
0

論理式でwhich()を使用すると、結果に1を追加できます。

sel <- which(grep("abc", df$V4))
sel <- c(sel, sel+1)
df[-sel,]
于 2012-06-13T14:45:10.510 に答える
0
df[which(!(regexpr("abc", df$V4) ==1))+c(0,1),]
于 2012-06-13T15:06:35.167 に答える