-----Original Message-----
From: R-help <r-help-bounces at r-project.org> On Behalf Of Bert Gunter
Sent: Tuesday, November 13, 2018 6:44 AM
To: Duncan Murdoch <murdoch.duncan at gmail.com>
Cc: R-help <R-help at r-project.org>
Subject: Re: [R] which element is duplicated?
It is not clear to what you want for the general case. Perhaps:
v <- letters[c(2,2,1,2,1,1)]
wh <- tapply(seq_along(v),factor(v), '[',1) w <- wh[match(v,v[wh])] w
## and if you want NA's for the first occurences of unique values ##
of course:
w[wh] <- NA
w
b b a b a a
NA 1 NA 1 3 3
I'd like to see a cleverer solution that vectorizes and avoids the tapply(),
though.
Cheers,
Bert
On Mon, Nov 12, 2018 at 8:33 PM Bert Gunter <bgunter.4567 at gmail.com>
wrote:
[1] 1 2 2 1
Bert Gunter
"The trouble with having an open mind is that people keep coming along
and sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
On Mon, Nov 12, 2018 at 5:08 PM Duncan Murdoch
<murdoch.duncan at gmail.com>
wrote:
The duplicated() function gives TRUE if an item in a vector (or row
in a matrix, etc.) is a duplicate of an earlier item. But what I
would like to know is which item does it duplicate?
For example,
v <- c("a", "b", "b", "a")
duplicated(v)
returns
[1] FALSE FALSE TRUE TRUE
What I want is a fast way to calculate
[1] NA NA 2 1
or (equally useful to me)
[1] 1 2 2 1
The result should have the property that if result[i] == j, then v[i]
== v[j], at least for i != j.
Does this already exist somewhere, or is it easy to write?
Duncan Murdoch