Combining pivoted rows in R by common value

后端 未结 4 1640
天涯浪人
天涯浪人 2020-12-04 03:17

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         


        
4条回答
  •  春和景丽
    2020-12-04 03:43

    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)
    

提交回复
热议问题