如何旋转列?
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
方法
- 删除第一行 -
slice(-1)
,重塑为 'long' 格式 (pivot_longer
)
- 仅保留第一行 -
slice(1)
,重塑为 'long' 格式 (pivot_longer
)
- 对两个重塑后的数据集进行连接
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))
我在 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
方法
- 删除第一行 -
slice(-1)
,重塑为 'long' 格式 (pivot_longer
) - 仅保留第一行 -
slice(1)
,重塑为 'long' 格式 (pivot_longer
) - 对两个重塑后的数据集进行连接
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))