R 使用重复值将数据从长变宽

R 使用重复值将数据从长变宽,r,reshape2,R,Reshape2,这是根据我的实际数据稍微修改的随机样本。我想: fill W id X T 1 403 29730 100 111 1 8395 10766 100 92 1 4170 14291 100 98 1 2768 20506 200 110 1 3581 15603 100 112

这是根据我的实际数据稍微修改的随机样本。我想:

  fill       W   id       X        T
    1       403 29730    100      111
    1      8395 10766    100       92
    1      4170 14291    100       98
    1      2768 20506    200      110
    1      3581 15603    100      112
    6         1 10504    200       87
    9       48  29730    100       89
    1     4790  10766    200       80
注意ID
29730
同时位于T
89
111
中。但我认为这应该是
重塑2::dcast


data\u-wide如果我理解正确,考虑到OP的要求,这不是一个简单的从长到宽的重塑问题:

  • 必须维护行顺序
  • 列的顺序必须为
    W
  • 缺少的条目应显示为空白,而不是
    NA
  • 这需要

    • 要添加要包含在重塑公式中的行号
    • 要将
      W
      转换为一个因子,其中因子水平通过使用
      forecats::fct_inoorder()
      按外观排序,例如
    • 要使用聚合函数,使用
      toString()
      中打开
      NA
      ,例如
    • 以及从重塑后的结果中删除行号
    在这里,
    data.table
    实现
    dcast()
    被用作
    数据。table
    看起来更方便,IMHO

     id       X        T   403 8395 ....
     29730    100      111   1
     10766    100       92       1  
     14291    100       98
     20506    200      110
     15603    100      112
     10504    200       87
     29730    100       89
     10766    200       80
    
    资料
    库(data.table)
    
    data_long如果我理解正确,考虑到OP的要求,这不是一个从长到宽的问题:

  • 必须维护行顺序
  • 列的顺序必须为
    W
  • 缺少的条目应显示为空白,而不是
    NA
  • 这需要

    • 要添加要包含在重塑公式中的行号
    • 要将
      W
      转换为一个因子,其中因子水平通过使用
      forecats::fct_inoorder()
      按外观排序,例如
    • 要使用聚合函数,使用
      toString()
      中打开
      NA
      ,例如
    • 以及从重塑后的结果中删除行号
    在这里,
    data.table
    实现
    dcast()
    被用作
    数据。table
    看起来更方便,IMHO

     id       X        T   403 8395 ....
     29730    100      111   1
     10766    100       92       1  
     14291    100       98
     20506    200      110
     15603    100      112
     10504    200       87
     29730    100       89
     10766    200       80
    
    资料
    库(data.table)
    
    这不就是一个重塑的问题吗<代码>tidyr::排列(df,W,fill)
    可能重复这不只是一个重塑问题吗<代码>tidyr::排列(df、W、填充)
    可能重复的
          id   T   X 403 8395 4170 2768 3581 1 48 4790
    1: 29730 111 100   1                              
    2: 10766  92 100        1                         
    3: 14291  98 100             1                    
    4: 20506 110 200                  1               
    5: 15603 112 100                       1          
    6: 10504  87 200                         6        
    7: 29730  89 100                            9     
    8: 10766  80 200                                 1
    
    library(data.table)
    data_long <- fread("  fill       W   id       X        T
        1       403 29730    100      111
        1      8395 10766    100       92
        1      4170 14291    100       98
        1      2768 20506    200      110
        1      3581 15603    100      112
        6         1 10504    200       87
        9       48  29730    100       89
        1     4790  10766    200       80")