On Wed, Apr 25, 2012 at 6:14 AM, Patrick Hausmann <patrick.hausm...@covimo.de> wrote: > Hello, > > I am trying to get a new vector 'x1' based on the not NA-values in column > 'a' and 'b'. I found a way but I am sure this is not the best solution. So > any ideas on how to "optimize" this would be great!
If by optimize you mean no loops, you could try (df<- structure(list(a = structure(c(NA, 1L, 2L, 3L, 4L, NA, 6L, 6L ), .Label = c("a1", "a2", "b1", "b2", "b3", "d1"), class = c("ordered", "factor")), b = structure(c(1L, NA, 2L, NA, 4L, 5L, 6L, 6L), .Label = c("a1", "a2", "b1", "b2", "b3", "d1"), class = c("ordered", "factor"))), .Names = c("a", "b"), row.names = c(NA, -8L), class = "data.frame")) x0 <- factor(paste(ifelse(is.na(df[,1]),'',df[,1]), ifelse(is.na(df[,2]),'',df[,2]), sep='')) df$x1 <- as.numeric(x0) # only needed for a numeric vector as in your solution df HTH PS - In the future please avoid "df" and "data" as object names, as they mask R functions. > m <- factor(c("a1", "a1", "a2", "b1", "b2", "b3", "d1", "d1"), ordered = > TRUE) > df <- data.frame( a= m, b = m) > df[1,1] <- NA > df[4,2] <- NA > df[2,2] <- NA > df[6,1] <- NA > df > > w <- !apply(df, 2, is.na) > v <- apply(w, 1, FUN=function(L) which(L == TRUE)[[1]]) > > for (i in 1:nrow(df) ) { > g[i] <- df[i, v[i]] > } > > df$x1 <- g > > Thanks for any help > Patrick > > ______________________________________________ > 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. ______________________________________________ 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.