Грязный способ сделать это в базе r - это транспонировать продажи каждой компании в al oop и преобразовать обратно в data.frame.
lst = list()
i <- 1
for (name in unique(df$Company)){
lst[[i]] <- data.frame(t(df[df$Company == name, 'Sales']))
i <- i + 1
}
out <- cbind(unique(df$Company), Reduce(rbind, lst))
colnames(out) <- c(colnames(df)[1], unique(df$Product))
out
Edit: Вот функция, которая завершает предыдущий ответ.
convwide <- function(data, by, datcol, namcol){
lst = list()
i <- 1
for (name in unique(df[[by]])){
lst[[i]] <- data.frame(t(df[df[[by]] == name, datcol]))
i <- i + 1
}
out <- cbind(unique(df[[by]]), Reduce(rbind, lst))
colnames(out) <- c(by, unique(df[[namcol]]))
return(out)
}
convwide(df, 'Company', 'Sales', 'Product')