Следующие ответы к пункту 1).
Max <- max(df1$Quantity)
res <- lapply(seq_len(nrow(df1)), function(i){
c(rep(as.character(df1[i, 2]), df1[i, 3]), rep(NA, Max - df1[i, 3]))
})
res <- cbind(df1[1], do.call(rbind, res))
names(res)[-1] <- paste0(names(df1)[2], names(res)[-1])
res
# Order ID Sub-Category1 Sub-Category2 Sub-Category3
#1 CA-2017-152156 Bookcases Bookcases <NA>
#2 CA-2017-152156 Chairs Chairs Chairs
#3 CA-2017-138688 Labels Labels <NA>
Данные в формате dput
.
df1 <-
structure(list(`Order ID` = structure(c(2L, 2L, 1L),
.Label = c("CA-2017-138688", "CA-2017-152156"),
class = "factor"), `Sub-Category` = structure(1:3,
.Label = c("Bookcases", "Chairs", "Labels"), class =
"factor"), Quantity = c(2L, 3L, 2L)), class = "data.frame",
row.names = c("1", "2", "3"))