[R] coalesce columns within a data frame
Ivan Alves
papucho at mac.com
Wed Oct 22 18:09:31 CEST 2008
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
More information about the R-help
mailing list