R Studio Cast / Melt на data.frame - PullRequest
0 голосов
/ 18 июня 2020

Я пробовал разные методы, чтобы достичь этого, и мне это не удалось. Я чувствую, что это просто, и я не уверен, что мне не хватает ... Я пытаюсь преобразовать этот фрейм данных ниже:

enter image description here

в

enter image description here

Я так понимаю, мне нужно сначала растопить, а затем отлить, хотя я не могу заставить это работать.

mydata <- melt(df, id.vars = "Company", measure.vars = "Product")
mydata2 <- cast(mydata, "Company" ~ "Product")

1 Ответ

0 голосов
/ 19 июня 2020

Грязный способ сделать это в базе 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')
...