如何旋转列?

How do I pivot columns?

我在 Excel 文件中发现了这个数据框,非常混乱。这只是一个更大的数据集的一个示例,有很多工作。

df <- data.frame(
  Job = c("Frequency", "Driver", "Operator"),
  Gloves = c("Daily", 1,2),
  Aprons = c("Weekly", 2,0),
)

视觉上是

我需要它采用这种格式,我可以在数据库中使用它:

df <- data.frame(
  Job = c("Driver", "Driver", "Operator", "Operator"),
  Frequency= c("Daily", "Weekly", "Daily", "Weekly"),
  Item= c("Gloves", "Aprons", "Gloves", "Aprons"),
  Quantity= c(1,2,2,0)
)

视觉上是

关于我们必须如何操作数据有什么想法吗?我已经试过了,但没有成功。

我们可以分三步使用 tidyverse 方法

  1. 删除第一行 - slice(-1),重塑为 'long' 格式 (pivot_longer)
  2. 仅保留第一行 - slice(1),重塑为 'long' 格式 (pivot_longer)
  3. 对两个重塑后的数据集进行连接
library(dplyr)
library(tidyr)
df %>% 
   slice(-1) %>%
   pivot_longer(cols = -Job, names_to = 'Item', 
       values_to = 'Quantity') %>%
    left_join(df %>%
         slice(1) %>% 
         pivot_longer(cols= -Job, values_to = 'Frequency',
            names_to = 'Item') %>% 
        select(-Job) )

-输出

# A tibble: 4 x 4
  Job      Item   Quantity Frequency
  <chr>    <chr>  <chr>    <chr>    
1 Driver   Gloves 1        Daily    
2 Driver   Aprons 2        Weekly   
3 Operator Gloves 2        Daily    
4 Operator Aprons 0        Weekly   

数据

df <- data.frame(
  Job = c("Frequency", "Driver", "Operator"),
  Gloves = c("Daily", 1,2),
  Aprons = c("Weekly", 2,0))