> Can anybody help me in solving the following problem:
> I have a series of complex numbers z[i], i=1,....,N
> There are numerous repetitions in these numbers. For example, N is of order
> 1,000,000. However, only ~20,000 of z[i] are different. I need to assign a
> unique name or number to each of z[i] in such a way that equal z have the same
> name.
> For example, I have
>
> z_c(0+0i,1+0i,0+1i,1+1i,10+1i,0+1i,0+1i,1+1i,10-1i,0+1i,10+1i,0+1i,0+1i,1+1i)
>
> I need to name them as follows
>
names(z)_c("z1","z2","z3","z4","z5","z3","z3","z4","z6","z3","z5","z3","z3","z4"
> )
Here is the summury of answers:
11111111:
Here's a one-liner which uses the very powerful, but often overlooked,
match function:
names(z)<-paste("z",match(z,unique(z)),sep="")
Shawn Boles, Ph.D.
Oregon Research Institute Internet: shawn@ori.org
1715 Franklin Blvd. Voice: (541) 484-2123 Ext. 225
Eugene, Oregon /97403-1983 USA Fax: (541) 484-1108
222222222:
Try this:
names( z ) <- paste( "z", match( z, unique( z )), sep = "" )
or if you just want a unique number:
uniquenums <- match( z, unique( z ))
--Jennifer Hodgdon
_______________________________________________
Jennifer Hodgdon jhodgdon@statsci.com
(206)283-8802 x297 Fax (206)283-8691
MathSoft, Inc., 1700 Westlake Ave N, Seattle, WA 98109
3333333:
z _ complex(real=sample(1:10, replace=T,
size=100),imaginary=sample(1:10,replace=T, size=100))
Now
z.f <- factor(z)
as.numeric(z.f)
gives the numeric decription,
levels(z.f)
gives the mapping of numbers to labs.
S.D.Byers" <byers@stat.washington.edu>
4444444:
There are probably many variations on this theme, but try
something along the lines of:
unique.values <- unique(z)
unique.names <- paste("z", 1:length(unique.values), sep="")
all.names <- unique.names(match(z, unique.values))
names(z) <- all.names
Hope that helps.
--Todd
-- Z. Todd Taylor Pacific Northwest National Laboratory Todd.Taylor@pnl.gov Why is it Filipino, not Philippino?5555555:
One way to do this is to use the "factor" function, then change the names using the "levels" function.
zfac <- factor(z) levels(z) <- c("z1","z2","z3", ...)
I hope this helps,
Rod
------------------ Rod Tjoelker Applied Statistics The Boeing Company
777777777:
There is a meta-answer to many of the questions proposed on this list and that is "use the match function and indexing".
Here is how it would work in this case:
Try the following:
name(z) <- paste('z',match(z,unique(z)),sep='')
888888888:
x_factor(z)
is all you need to do. The levels of the factor are by default the character representations of the values in z and are coded by 1,2, ... length(unique(z)). codes(x) will give you all the (repeated) codes. You can use the labels option of factor if you would like "labels" for the numbers different than 1,2, ...length(unique(z)).
Bert Gunter Biometrics Research Merck Research Labs P.O. Box 2000 Rahway, NJ 07065-0900 732-594-7765
999999999: A quick and easy way to identify identical elements of a vector is the function match():
Try
z_c <- complex(real = round(rnorm(1000),1), imaginary = round(rnorm(1000),1)) names(z_c) <- paste("z", match(z_c,z_c), sep="")
For 1'000'000 elements this only takes a couple of seconds on a 200 MHz Pentium Pro PC (NT4.0, S+4.0)
Greetings
Jan
--------------------------------------------------------------- Jan Schelling Institute of Process Engineering ETH Zurich, 8092 Switzerland phone: ++41-1-633 62 63 fax: ++41-1-633 11 19 email: schelling@ivuk.mavt.ethz.ch internet: http://www.ivuk.ethz.ch/staff/Schelling/
##################
Thanks again,
Simon Rosenfeld NOAA Science Center, NESDIS/Satellite Research Lab Camp Springs, MD ----------------------------------------------------------------------- This message was distributed by s-news@wubios.wustl.edu. To unsubscribe send e-mail to s-news-request@wubios.wustl.edu with the BODY of the message: unsubscribe s-news