G'day all, On Thu, 12 Feb 2009 14:06:21 -0600 (CST) markle...@verizon.net wrote:
> Hi Jason: below seems to work. you have to take the transpose because > the apply > returns the rows transposed. i'm also not sure how to make the NAs be > the last > ones but maybe someone can show us how to do that. > > mat <- matrix(c(2,7,2,7,9,10,10,6,8,6,1,9,7,2,0),byrow=TRUE,nrow=3) > print(mat) > > t(apply(mat,1, function(.row) { > .row[duplicated(.row)] <- NA > .row > })) Alternatively to Rolf's solution for putting NAs at the end, if the order of the entries is not important, a sort(.row, na.last=TRUE) instead of Rolf's na.at.end(.row) would do the trick too. Yet another way would be to just search for the unique values, concatenate them with a (sufficiently long) vector of NAs and then shorten the result to the desired size: t(apply(mat, 1, function(r){ rl <- length(r) c(unique(r), rep(NA,rl))[1:rl] })) Cheers, Berwin ______________________________________________ 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.