在 R 中从长格式转换为宽格式

Transform to wide format from long in R

我在 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_coverageB_Coverage 将使用公式在 excel 中计算。但我需要帮助的问题是将数据框从宽格式转换为长格式(原始格式)。

我尝试实施 linked duplicate 的解决方案,但我仍然遇到困难:

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))

谢谢

这是一种使用 dplyrtidyr 的方法,这两个流行的 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