代码之家  ›  专栏  ›  技术社区  ›  Morpheus

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

  •  0
  • Morpheus  · 技术社区  · 6 年前

    我有以下数据:

    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 回复  |  直到 6 年前
        1
  •  1
  •   rockcop    6 年前

    你可以用整形2,但我发现我用起来容易多了 tidyr .

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

    unite() 通过将 Device TIME 列,并命名它 new_col ,然后 spread() 把它的价值 新歌 沿着顶部作为列,使用 New 作为关键。

    希望能有帮助!

        2
  •  0
  •   YOLO    6 年前

    你可以用 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)