首页 > 解决方案 > 如何将数据转换为长/水平格式?

问题描述

正如问题的主题所暗示的那样,我有以下数据集,可能是横截面的。请参阅下面的代码,

   W1        W2        W3        (…) 
P1  11  12  10  8   13  12  14  21  6   
P2  7   6   3   2   7   1   6   3   3   
P3  7   11  8   9   10  8   7   13  12  
P4  12  8   13  5   9   6   9   13  13  
P5  8   5   13  11  6   7   9   14  9   
P6  3   3   2   7   6   3   8   6   6   
6 rows | 1-10 of 52 columns

假设我们有变量 W 代表周,P 代表产品。我的问题:如何以我拥有带有变量的长数据集的方式转换我的数据集:时间(以周为单位)产品(销售)如下:

Time Product_Number Product_Sales
    W1      P1             20
    W2      P2              5     
    (...)   (...)         (...)   

标签: rpanel-data

解决方案


如果您更喜欢使用data.table,另一种解决方案是使用该melt功能将数据从宽更改为长。使用 Nicolas 的示例数据:

library(data.table)

data <- data.frame(id=c("p1","p2","p3","p4","p5"),
                   w1=c(11,2,3,5,7),
                   w2=c(13,5,3,6,7),
                   w3=c(30,2,3,8,7))

data_wide <- as.data.table(data)
data_long <- melt(data_wide, id.vars = 'id', variable.name = 'weeks', value.name = 'sales')
data_long
#>     id weeks sales
#>  1: p1    w1    11
#>  2: p2    w1     2
#>  3: p3    w1     3
#>  4: p4    w1     5
#>  5: p5    w1     7
#>  6: p1    w2    13
#>  7: p2    w2     5
#>  8: p3    w2     3
#>  9: p4    w2     6
#> 10: p5    w2     7
#> 11: p1    w3    30
#> 12: p2    w3     2
#> 13: p3    w3     3
#> 14: p4    w3     8
#> 15: p5    w3     7

reprex 包于 2021-11-04 创建(v2.0.1)


推荐阅读