5

私は特に、繰り返されないベクトルから値を取得しようとするこの問題について考え始めました。unique要素が繰り返されるのは一度だけなので、(ドキュメントから収集できる限り)良くありません。duplicated重複する値が初めて見つかったときに FALSE が返されるため、同じ問題があります。これが私の回避策でした

> d=c(1,2,4,3,4,6,7,8,5,10,3)
> setdiff(d,unique(d[duplicated(d)]))
[1]  1  2  6  7  8  5 10

以下は、より一般的なアプローチです

> table(d)->g
> as.numeric(names(g[g==1]))
[1]  1  2  5  6  7  8 10

これは 1 以外の値に一般化できます。しかし、文字列を数値に変換するこの解決策は少し扱いに​​くいと思います。このベクトルを取得するためのより良い、またはより簡単な方法はありますか?

4

5 に答える 5

4

値を並べ替えてから、 n回連続rleして表示される値を取得するために使用できます。

rl <- rle(sort(d))

rl$values[rl$lengths==1]
## [1]  1  2  5  6  7  8 10

rl$values[rl$lengths==2]
## [1] 3 4
于 2014-09-30T14:56:13.217 に答える
2

ここのワンライナーは完全に不必要ですが、ワンライナーは常に素晴らしいです

2 回出現するすべての要素を見つけたいとします。plyrパッケージの使用:

count(d)$x[count(d)$freq==2]
#Output
#[1] 3 4
于 2014-09-30T15:08:30.307 に答える
1

duplicatedn=1 に使用できます。2 回呼び出してfromLast引数を使用するだけです。

sort(d[! (duplicated(d) | duplicated(d, fromLast=TRUE))])
# [1]  1  2  5  6  7  8 10
于 2014-09-30T15:06:48.233 に答える