使用 reshape2 通过从多个因素创建列来透视数据
Using reshape2 to pivot data by creating a column from multiple factors
我有以下数据:
ID Device TIME New
ABC Brush 2016_Q1 3
ABC Brush 2016_Q2 4
ABC Brush 2016_Q3 2
ABC Brush 2016_Q4 1
DEF Brush 2016_Q1 4
DEF Brush 2016_Q2 3
DEF Brush 2016_Q3 5
DEF Brush 2016_Q4 2
ABC Pen 2016_Q1 1
ABC Pen 2016_Q2 3
ABC Pen 2016_Q3 2
ABC Pen 2016_Q4 4
DEF Pen 2016_Q1 1
DEF Pen 2016_Q2 3
DEF Pen 2016_Q3 2
我想创建一个新的数据集,其中每个 ID 都有一条记录,如下所示
Id brush_New_2016_Q1 brush_New_2016_Q2 brush_New_2016_Q3 brush_New_2016_Q4 pen_New_2016_Q1 pen_New_2016_Q2 pen_New_2016_Q3 pen_New_2016_Q4
ABC 3 4 2 1 1 3 2 4
DEF 4 3 5 2 1 3 2 0
我知道我必须使用 Reshape2
包,但我不确定如何使用它来生成结果 table。这是自动创建列名的方法吗?我有 20 台设备和 3 年的数据。
您可以使用 data.table
包中的 dcast
函数:
# create a dummy column
df$sudo <- paste(df$Device, 'New', df$TIME, sep = '_')
# expand the data using dcast
dcast(df[c('ID','sudo','New')], ID ~ sudo, fill = 0)
您可以使用 reshape2,但我发现使用 tidyr 更容易。
df %>%
unite(new_col, 2, 3, sep = "_") %>%
spread(new_col, New)
unite()
通过将 Device
和 TIME
列粘合在一起创建一个新列,并将其命名为 new_col
,然后 spread()
转换值顶部的 new_col
作为列,使用 New
作为键。
希望对您有所帮助!
我有以下数据:
ID Device TIME New
ABC Brush 2016_Q1 3
ABC Brush 2016_Q2 4
ABC Brush 2016_Q3 2
ABC Brush 2016_Q4 1
DEF Brush 2016_Q1 4
DEF Brush 2016_Q2 3
DEF Brush 2016_Q3 5
DEF Brush 2016_Q4 2
ABC Pen 2016_Q1 1
ABC Pen 2016_Q2 3
ABC Pen 2016_Q3 2
ABC Pen 2016_Q4 4
DEF Pen 2016_Q1 1
DEF Pen 2016_Q2 3
DEF Pen 2016_Q3 2
我想创建一个新的数据集,其中每个 ID 都有一条记录,如下所示
Id brush_New_2016_Q1 brush_New_2016_Q2 brush_New_2016_Q3 brush_New_2016_Q4 pen_New_2016_Q1 pen_New_2016_Q2 pen_New_2016_Q3 pen_New_2016_Q4
ABC 3 4 2 1 1 3 2 4
DEF 4 3 5 2 1 3 2 0
我知道我必须使用 Reshape2
包,但我不确定如何使用它来生成结果 table。这是自动创建列名的方法吗?我有 20 台设备和 3 年的数据。
您可以使用 data.table
包中的 dcast
函数:
# create a dummy column
df$sudo <- paste(df$Device, 'New', df$TIME, sep = '_')
# expand the data using dcast
dcast(df[c('ID','sudo','New')], ID ~ sudo, fill = 0)
您可以使用 reshape2,但我发现使用 tidyr 更容易。
df %>%
unite(new_col, 2, 3, sep = "_") %>%
spread(new_col, New)
unite()
通过将 Device
和 TIME
列粘合在一起创建一个新列,并将其命名为 new_col
,然后 spread()
转换值顶部的 new_col
作为列,使用 New
作为键。
希望对您有所帮助!