[R] How to compare X1 = X2 = ... = Xn?

Jim Brennan jfbrennan at rogers.com
Tue Jul 20 03:20:43 CEST 2004


This similar method may  be quicker
 x1$new <- 1*(rowSums(x1)/ncol(x1)==x1[,1])
Learning lots from these type questions!

Jim
----- Original Message -----
From: "Gabor Grothendieck" <ggrothendieck at myway.com>
To: <r-help at stat.math.ethz.ch>
Sent: Monday, July 19, 2004 3:41 PM
Subject: Re: [R] How to compare X1 = X2 = ... = Xn?


> Berton Gunter <gunter.berton <at> gene.com> writes:
>
> :
> : How about:
> :
> : X<-as.matrix(yourframe)
> : apply(X,2, '==',X[,1])%*%rep(1,ncol(X)) == ncol(x)
> :
> : avoiding the rowwise apply overhead?
>
> Following up on your idea we can use rowSums instead of matrix
multiplication
> to speed it up even more:
>
> R> x <- data.frame(X1 = c(1.5, 1.5, 2.5, 4.5),
> + X2 = c(4.5, 1.5, 2.5, 5.5), X3 = c(2.5, 1.5, 2.5, 2.5))
> R> set.seed(1)
> R> x1 <- x2 <- x[sample(4,100000,rep=T),]
>
> R> gc();system.time({x1$new <- (rowSums(x1==x1[,1])==ncol(x))+0})
>           used (Mb) gc trigger (Mb)
> Ncells  634654 17.0    1590760 42.5
> Vcells 1017322  7.8    3820120 29.2
> [1] 0.48 0.00 0.48   NA   NA
>
> R> gc(); system.time({X <- as.matrix(x2); x2$new <- c(apply(X,2,
'==',X[,1])%*%
> rep(1,ncol(X)) == ncol(x))+0})
>           used (Mb) gc trigger (Mb)
> Ncells  634668 17.0    1590760 42.5
> Vcells 1517333 11.6    3820120 29.2
> [1] 1.39 0.03 1.50   NA   NA
>
> R> all.equal(x1,x2)
> [1] TRUE
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide!
http://www.R-project.org/posting-guide.html




More information about the R-help mailing list