通过多个因素创建列,使用reshape2来透视数据

时间:2018-07-24 20:04:28

标签: r reshape

我有以下数据:

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包,但是我不确定如何使用它来生成结果表。这是自动创建列名的方法吗?我有20台设备和3年的数据。

2 个答案:

答案 0 :(得分:1)

您可以使用reshape2,但我发现使用tidyr可以轻松得多。

df %>% unite(new_col, 2, 3, sep = "_") %>% spread(new_col, New)

unite()通过将DeviceTIME列粘合在一起来创建新列,并将其命名为new_col,然后spread()转换该列的值顶部的new_col为列,使用New作为键。

希望有帮助!

答案 1 :(得分:0)

您可以使用dcast软件包中的data.table函数:

# 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)