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
______________________________________________
[email protected] 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.