Dear list, I cannot find an elegant solution to this problem. I have a factor f containing several levels (5) and I wish to create a new factor of the same length with fewer levels (2). This new factor should therefore group together some levels of the original data. Ideally this grouping would be at random, i.e I would not group together the first 2 levels of f, then the following 3, etc.
Below is a minimal example (my real problem has more levels, otherwise I would do the operation manually...) f <- factor(rep(sample(letters[1:5], 20, repl=TRUE), each=10)) # permute the levels in random order disorder <- sample(levels(f), length(levels(f))) # new levels matching the old ones new.lev <- rep(LETTERS[1:2], length=length(disorder)) # associate old levels to new ones groups <- split(disorder, new.lev) # test each element of f for its new category test <- lapply(groups, function(g) f %in% g) # f2 is the new factor, initialized with f f2 <- as.character(f) # recursively modify f2 sapply(seq_along(test), function(ii) f2[test[[ii]]] <<- names(test[ii])) # make it a factor f2 <- factor(f2) Any suggestions are very welcome, I must have missed something more obvious! Best regards, baptiste ______________________________________________ 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.