Hi Elahe, When you want to include a usable toy data frame, it's better to use something like: dput(mydata[1:100]) So if we have a data frame like this: mydata<-data.frame(RE=sample(5:50,100,TRUE), LU=sample(1500:4500,100), COUNTRY=factor(sample(c("DE","FR","JP","AU"),100,TRUE)), Light=factor(sample(c("ON","OFF"),100,TRUE)), OR=factor(sample(c("S","T"),100,TRUE)), PAT=factor(sample(c("low","high","middle"),100,TRUE))) Then you can create logical expressions for all combinations of your levels like this: subcomb<-expand.grid(list(levels(mydata$COUNTRY), levels(mydata$Light),levels(mydata$OR),levels(mydata$PAT))) Then you can loop through this data frame creating a string that corresponds to your logical expression: for(subsetter in 1:dim(subcomb)[1]) { subexpr<-paste(names(mydata)[3:6],subcomb[subsetter,], sep="==",collapse="&") subset(mydata,do_something_to(subexpr),select=c("RE","LU")) } but I have not been able to work out how to transform the strings "subexpr" into logical expressions. I feel pretty sure that someone will show me up on this. Jim