Я подозреваю, что есть несколько различных подходов, которые вы можете использовать (и, вероятно, лучше).
Если вы действительно хотите использовать dcast
, здесь может быть один подход:
ПервыйЯ бы melt
данные на основе даты, часа и водителя.Затем создаст идентификатор для каждой из этих уникальных комбинаций.Затем для каждого идентификатора, добавил бы порядковый номер для каждого пассажира.Тогда dcast
:
library(reshape2)
test_table <- data.frame(
test_iddep = c("AAA1", "BBB2", "CCC3", "DDD4", "EEE5"),
test_Date = c("01/05/2019", "01/05/2019", "01/07/2019", "01/07/2019", "01/07/2019"),
test_hourdep = c("8:00", "8:00", "10:00", "10:00", "10:00"),
test_driv = c("A", "A", "B", "B", "B"),
test_pass1 = c("B", "C", "D", "E", "F")
)
x <- melt(test_table[-1], id.vars = c("test_driv", "test_Date", "test_hourdep"))
x$id <- cumsum(!duplicated(x[1:3]))
x$time <- ave(x$id, x$id, FUN=seq_along)
dcast(x, test_driv + test_Date + test_hourdep ~ time, value.var = "value")
test_driv test_Date test_hourdep 1 2 3
1 A 01/05/2019 8:00 B C <NA>
2 B 01/07/2019 10:00 D E F
Пожалуйста, дайте мне знать, если это то, что вы имели в виду для вывода.Я удалил test_iddep
, поскольку это звучит так, как будто это не нужно из вашего вопроса.