Преобразование в широкий формат из длинного в R - PullRequest
0 голосов
/ 18 июня 2020

У меня есть фрейм данных в R, который выглядит как показано ниже

Model Month Demand Inventory
A      Jan     10     20
B      Feb     30     40
A      Feb     40     60

Я хочу, чтобы фрейм данных выглядел

                 Jan        Feb
A_Demand         10         40
A_Inventory      20         60
A_coverage       
B_Demand                    30
B_Inventory                 40
B_coverage     

A_coverage и B_Coverage будет вычислено в преуспеть с помощью формулы. Но проблема, с которой мне нужна помощь, - это развернуть фрейм данных из широкого формата в длинный (исходный формат).

Я пытался реализовать решение из связанного дубликата , но у меня все еще есть сложность:

HD_dcast <- reshape(data,idvar = c("Model","Inventory","Demand"),
                    timevar = "Month", direction = "wide")

Вот dput моих данных:

data <- structure(list(Model = c("A", "B", "A"), Month = c("Jan", "Feb", 
"Feb"), Demand = c(10L, 30L, 40L), Inventory = c(20L, 40L, 60L
)), class = "data.frame", row.names = c(NA, -3L))

Спасибо

1 Ответ

4 голосов
/ 18 июня 2020

Вот подход с dplyr и tidyr, двумя популярными пакетами R для обработки данных:

library(dplyr)
library(tidyr)
data %>% 
  mutate(coverage = NA_real_) %>%
  pivot_longer(-c(Model,Month), names_to = "Variable") %>%
  pivot_wider(id_cols = c(Model, Variable), names_from = Month ) %>%
  unite(Variable, c(Model,Variable), sep = "_")
## A tibble: 6 x 3
#  Variable      Jan   Feb
#  <chr>       <dbl> <dbl>
#1 A_Demand       10    40
#2 A_Inventory    20    60
#3 A_coverage     NA    NA
#4 B_Demand       NA    30
#5 B_Inventory    NA    40
#6 B_coverage     NA    NA
...