使用 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() 通过将 DeviceTIME 列粘合在一起创建一个新列,并将其命名为 new_col,然后 spread() 转换值顶部的 new_col 作为列,使用 New 作为键。

希望对您有所帮助!