With intermediate conversion via as.character :
Assuming this is your data:
dat <- data.frame(Var1=c("Asian",NA,"White"),Var2=c(NA,"Black",NA)) do.call(pmax,c(lapply(dat,as.character),na.rm=TRUE)) #[1] "Asian" "Black" "White"
If you need to work with a specific subset, you can do:
do.call(pmax,c(lapply(dat[c("Var1","Var2")],as.character),na.rm=TRUE))
An alternative not requiring as.character would be:
dat[cbind(1:nrow(dat),max.col(!is.na(dat)))] #[1] "Asian" "Black" "White"
source share