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.

Reply via email to