Migara Devinda
Migara Devinda

Reputation: 51

How to merge two columns in R?

newdf=data.frame(id=c(1,3,2),admission=c("2020-05-18","2020-04-30","2020-05-08"),
                 vent=c("mechanical_vent","self_vent","mechanical_vent"))

newdf$admission=as.Date(newdf$admission)


newdf1=data.frame(id=c(1,3,1,2,1,3,2,2),
                 date=c("2020-05-19","2020-05-02","2020-05-20","2020-05-09","2020-05-21","2020-05-04","2020-05-10","2020-05-11"),
                 vent=c("self_vent","mechanical_vent","mechanical_vent","mechanical_vent","self_vent","mechanical_vent","mechanical_vent","self_vent"))

newdf1$date=as.Date(newdf1$date)

newdf=newdf %>% group_by(id) %>% bind_rows(newdf,newdf1)

newdf$dates=paste(newdf$admission,newdf$date)

I want to merge admission and date columns as dates. I used paste function but it gives output with NA values. I have attached image of data set herewith. Could you please suggest a method to solve this?

enter image description here

Upvotes: 1

Views: 96

Answers (3)

Ronak Shah
Ronak Shah

Reputation: 388797

You can use coalesce -

library(dplyr)

newdf %>% ungroup %>% mutate(dates = coalesce(admission, date))

#      id admission  vent            date       dates     
#   <dbl> <date>     <chr>           <date>     <date>    
# 1     1 2020-05-18 mechanical_vent NA         2020-05-18
# 2     3 2020-04-30 self_vent       NA         2020-04-30
# 3     2 2020-05-08 mechanical_vent NA         2020-05-08
# 4     1 2020-05-18 mechanical_vent NA         2020-05-18
# 5     3 2020-04-30 self_vent       NA         2020-04-30
# 6     2 2020-05-08 mechanical_vent NA         2020-05-08
# 7     1 NA         self_vent       2020-05-19 2020-05-19
# 8     3 NA         mechanical_vent 2020-05-02 2020-05-02
# 9     1 NA         mechanical_vent 2020-05-20 2020-05-20
#10     2 NA         mechanical_vent 2020-05-09 2020-05-09
#11     1 NA         self_vent       2020-05-21 2020-05-21
#12     3 NA         mechanical_vent 2020-05-04 2020-05-04
#13     2 NA         mechanical_vent 2020-05-10 2020-05-10
#14     2 NA         self_vent       2020-05-11 2020-05-11

Upvotes: 1

TarJae
TarJae

Reputation: 78907

We could use pmax:

newdf$dates <- pmax(newdf$admission, newdf$date, na.rm = TRUE)

Output:

      id admission  vent            date       dates     
   <dbl> <date>     <chr>           <date>     <date>    
 1     1 2020-05-18 mechanical_vent NA         2020-05-18
 2     3 2020-04-30 self_vent       NA         2020-04-30
 3     2 2020-05-08 mechanical_vent NA         2020-05-08
 4     1 2020-05-18 mechanical_vent NA         2020-05-18
 5     3 2020-04-30 self_vent       NA         2020-04-30
 6     2 2020-05-08 mechanical_vent NA         2020-05-08
 7     1 NA         self_vent       2020-05-19 2020-05-19
 8     3 NA         mechanical_vent 2020-05-02 2020-05-02
 9     1 NA         mechanical_vent 2020-05-20 2020-05-20
10     2 NA         mechanical_vent 2020-05-09 2020-05-09
11     1 NA         self_vent       2020-05-21 2020-05-21
12     3 NA         mechanical_vent 2020-05-04 2020-05-04
13     2 NA         mechanical_vent 2020-05-10 2020-05-10
14     2 NA         self_vent       2020-05-11 2020-05-11

Upvotes: 1

Chris Ruehlemann
Chris Ruehlemann

Reputation: 21400

If you want to transfer the dates from admissionto date, where dateis NA, this will work:

newdf %>%
  mutate(across(c(admission, date), ~ as.character(.))) %>%
  mutate(date = ifelse(is.na(date), admission, date))

Upvotes: 2

Related Questions