旋转一列,同时将其余列保留在 R 中
Pivoting one column while keeping the rest in R
我对 R 中的编码还很陌生,我正在清理和转换一些数据。
我已经查看了 reshape() 和 reshape2() 的一些不同用法以帮助我转换函数,但我未能成功。
基本上我想做的是,将一列向上移动作为值的列 headers。
这是我的数据:
#My data:
KEYFIGURE LOCID PRDID KEYFIGUREDATE KEYFIGUREVALUE
Sales 1001 A 2018-01-01 1
Promo 1001 A 2018-01-02 2
Disc 1001 A 2018-01-03 3
Sales 1001 B 2018-01-01 10
Promo 1001 B 2018-01-01 11
Disc 1002 B 2018-01-03 12
我想得到的结果:
LOCID PRDID KEYFIGUREDATE Sales Promo Disc
1001 A 2018-01-01 1 2
1001 A 2018-01-03 3
1001 B 2018-01-01 10 11
1002 B 2018-01-03 12
但是,我很难弄清楚这怎么可能是一种聪明的方式。改造包。
你可以用 tidyr::spread
:
在一行中完成
library(tidyr)
df %>%
spread(KEYFIGURE, KEYFIGUREVALUE)
LOCID PRDID KEYFIGUREDATE Disc Promo Sales
1 1001 A 2018-01-01 NA NA 1
2 1001 A 2018-01-02 NA 2 NA
3 1001 A 2018-01-03 3 NA NA
4 1001 B 2018-01-01 NA 11 10
5 1002 B 2018-01-03 12 NA NA
该函数的工作方式是在数据集中为其提供 2 个变量:第一个是分布在多个列中的变量,而第二个是设置要放入这些单元格中的值的变量。
我对 R 中的编码还很陌生,我正在清理和转换一些数据。
我已经查看了 reshape() 和 reshape2() 的一些不同用法以帮助我转换函数,但我未能成功。
基本上我想做的是,将一列向上移动作为值的列 headers。
这是我的数据:
#My data:
KEYFIGURE LOCID PRDID KEYFIGUREDATE KEYFIGUREVALUE
Sales 1001 A 2018-01-01 1
Promo 1001 A 2018-01-02 2
Disc 1001 A 2018-01-03 3
Sales 1001 B 2018-01-01 10
Promo 1001 B 2018-01-01 11
Disc 1002 B 2018-01-03 12
我想得到的结果:
LOCID PRDID KEYFIGUREDATE Sales Promo Disc
1001 A 2018-01-01 1 2
1001 A 2018-01-03 3
1001 B 2018-01-01 10 11
1002 B 2018-01-03 12
但是,我很难弄清楚这怎么可能是一种聪明的方式。改造包。
你可以用 tidyr::spread
:
library(tidyr)
df %>%
spread(KEYFIGURE, KEYFIGUREVALUE)
LOCID PRDID KEYFIGUREDATE Disc Promo Sales
1 1001 A 2018-01-01 NA NA 1
2 1001 A 2018-01-02 NA 2 NA
3 1001 A 2018-01-03 3 NA NA
4 1001 B 2018-01-01 NA 11 10
5 1002 B 2018-01-03 12 NA NA
该函数的工作方式是在数据集中为其提供 2 个变量:第一个是分布在多个列中的变量,而第二个是设置要放入这些单元格中的值的变量。