通过公共值组合R中的旋转行

Num*_*rim 2 r

我有一个看起来像这样的数据框

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)

任何解决方案都会受到赞赏,在那里尝试合并时会遇到困难.

the*_*ail 5

只是aggregatena.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)