Dear all,
Thanks for all the replies.
I get something with Duncan's code (slightly more compact than the other two), but of class "integer", whereas the two inputs are class "factor". Clearly the name information is lost. I did not see anything on this in the help page for ifelse.

On this experience I also tried
df$Name <- df$NAME.x
df[is.na(df$NAME.x),"Name"] <- df[is.na(df $NAME.x),"NAME.y"]

but then again the "factor" issue was a problem (clearly the levels are not the same and then there is a conflict)

Any further guidance?
Kind regards,
Ivan

On 22 Oct 2008, at 17:26, Duncan Murdoch wrote:

On 10/22/2008 11:21 AM, Ivan Alves wrote:
Dear all,
I searched the mail archives and the R site and found no guidance (tried "merge", "cbind" and terms like "coalesce" with no success). There surely is a way to coalesce (like in SQL) columns in a dataframe, right? For example, I would like to go from a dataframe with two columns to one with only one as follows:
From
Name.x Name.y
nx1 ny1
nx2 NA
NA ny3
NA NA
...
To
Name
nx1
nx2
ny3
NA
...
where column Name.x is taken if there is a value, and if not then column Name.y
Any help would be appreciated

I don't know of any special function to do that, but ifelse() can handle it easily:

Name <- ifelse(is.na(Name.x), Name.y, Name.x)

(If those are columns of a dataframe named df, you'd prefix each column name by df$, or do

within(df, Name <- ifelse(is.na(Name.x), Name.y, Name.x))

Duncan Murdoch

______________________________________________
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.

Reply via email to