1

data.frame の同じ間隔値で繰り返されるすべての行を削除するのに助けが必要です。

たとえば、次のような data.frame があります。

Time                X   Y   Z
01/01/2011 00:00    101 200 302
01/01/2011 00:05    101 200 302
01/01/2011 00:10    101 200 302
01/01/2011 00:20    100 200 303
01/01/2011 00:25    100 200 303
01/01/2011 00:30    100 200 303
01/01/2011 00:35    101 200 302
01/01/2011 00:40    100 200 303
01/01/2011 00:45    100 200 303

繰り返される行の値 (x、y、z) を削除すると、次のような結果が得られます。

Time                X   Y   Z
01/01/2011 00:00    101 200 302
01/01/2011 00:20    100 200 303
01/01/2011 00:35    101 200 302
01/01/2011 00:40    100 200 303

私が試したこと:ユニークまたは重複した機能ですが、異なる結果が得られます。

元/eliminate <- data[!duplicated(data[,c("X","Y","Z")]),]

このコードは、すべての data.frame で重複した値をすべて削除するだけです。

誰かが解決策を見つけるのを手伝ってくれる人はいますか?

よろしくお願いします。

ユギズ

4

2 に答える 2

2

Probably not the most elegant way:

data  <- within(data, C <- paste(X, Y, Z, sep = ""))
rl <- rle(data$C)$lengths
data <- data[c(1, cumsum(rl)[-length(rl)] + 1), 1:(ncol(data)-1)]
于 2012-06-20T10:10:35.460 に答える
2

次のコードは、対象の 3 つの列を 1 つのベクトルにします。次に、ベクトルとオフセットが 1 であるかどうかをテストします。それが false の場合、新しい XYZ アイテムへの遷移が発生しています。

n <- nrow(ss)
xyz <- with(ss, paste0(X, Y, Z))
sel <- xyz[1:(n-1)] !=  xyz[2:n]
ss[c(TRUE,sel),] #the first one would always be true

これは Julius の回答よりも約 3 倍高速です。データセットが大きくなるにつれて、利点は大きくなるはずです。

于 2012-06-20T10:25:38.153 に答える