I have a data frame that looks like this
Name Visit Arrival Departure
Jack week 1 8:00 NA
Jack week 1 NA 8:30
Sa
Just aggregate
it with na.omit
as the aggregation function:
aggregate(dat[c("Arrival","Departure")], dat[c("Name","Visit")], FUN=na.omit)
# or
aggregate(cbind(Arrival,Departure) ~ ., data=dat, FUN=na.omit, na.action=na.pass)
# Name Visit Arrival Departure
#1 Jack week1 8:00 8:30
#2 Adam week2 2:00 3:00
#3 Sally week5 9:00 9:30
Same logic works in data.table
:
dat[, lapply(.SD,na.omit), by=.(Name,Visit)]
...or dplyr
:
dat %>% group_by(Name,Visit) %>% summarise_all(na.omit)