我有一个看起来像这样的数据框
Name Visit Arrival Departure
Jack week 1 8:00 NA
Jack week 1 NA 8:30
Sally week 5 9:00 NA
Sally week 5 NA 9:30
Adam week 2 2:00 NA
Adam week 2 NA 3:00
Run Code Online (Sandbox Code Playgroud)
到达和离开时间最初是行,我转入colums这就是为什么有空值.我想基于名称和访问合并行,所以到达和离开是在同一行
Name Visit Arrival Departure
Jack week 1 8:00 8:30
Sally week 5 9:00 9:30
Adam week 2 2:00 3:00
Run Code Online (Sandbox Code Playgroud)
任何解决方案都会受到赞赏,在那里尝试合并时会遇到困难.
只是aggregate它na.omit作为聚合函数:
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
Run Code Online (Sandbox Code Playgroud)
相同的逻辑适用于data.table:
dat[, lapply(.SD,na.omit), by=.(Name,Visit)]
Run Code Online (Sandbox Code Playgroud)
......或者dplyr:
dat %>% group_by(Name,Visit) %>% summarise_all(na.omit)
Run Code Online (Sandbox Code Playgroud)