one way is the following: index <- expand.grid(1:4, 1:4, 1:4, 1:4)
mat <- data.matrix(index) keep <- apply(mat, 1, function (x, d) length(unique(x)) == d, d = ncol(mat)) index[keep, ] I hope it helps. Best, Dimitris Dimitri Liakhovitski wrote:
Hello, dear R-ers! I built a data frame "grid" (below) with 4 columns. I want to exclude all rows that have equal values in ANY 2 columns. Here is how I am doing it: index<-expand.grid(1:4,1:4,1:4,1:4) dim(index) # Deleting rows that have identical values in any two columns (1 line of code): index<-index[!(index$Var1==index$Var2)&!(index$Var1==index$Var3)&!(index$Var1==index$Var4)&!(index$Var2==index$Var3)&!(index$Var2==index$Var4)&!(index$Var3==index$Var4),] dim(index) index I was wondering if there is a more elegant way of doing it - because as the number of columns increases, the amount of code one would have to write increases A LOT. Thank you very much for any suggestion!
-- Dimitris Rizopoulos Assistant Professor Department of Biostatistics Erasmus University Medical Center Address: PO Box 2040, 3000 CA Rotterdam, the Netherlands Tel: +31/(0)10/7043478 Fax: +31/(0)10/7043014 ______________________________________________ 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.