张志杰 wrote: > Dear Rusers, I want to standardise the values of x/y coordinates to the unit > square, i.e. make the x-values all lie within [0,1] and all the y-values lie > within [0,1] in the bottom example. I had thought to use scale() function to > do it, but it seems that it's used to standardise a variable and the scaled > value was not within [0,1]. OR, i can divide x/y-values by their maximum > value to get it. I'm not sure about it.#Example data
> data <- matrix(1:10, nc=2) > data<-as.data.frame(data) > names(data)<-c('x','y') > > data > x y > 1 1 6 > 2 2 7 > 3 3 8 > 4 4 9 > 5 5 10 > I'd appreciate your help. (Beware line formatting in your emails) You can actually use scale(), but it is hardly worth it and an abuse of concepts. Just write a little function for the actual scaling and apply it to each column. st <- function(x)(x-min(x))/(max(x)-min(x)) data.frame(lapply(data,st)) Or, d.min <- apply(data,2,min) d.max <- apply(data,2,max) sweep(sweep(data, 2, d.min, "-"), 2, d.max - d.min, "/") or, same thing using scale() scale(data, center=d.min, scale=d.max - d.min) > > -- > Kind Regards, > John Chang > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > -- O__ ---- Peter Dalgaard Øster Farimagsgade 5, Entr.B c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - ([EMAIL PROTECTED]) FAX: (+45) 35327907 ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.