在R中传播列值

时间:2017-04-10 18:34:47

标签: r dataframe tidyr

您好我想更改我的数据框profile_table_long,代表来自2年的50家公司的24小时/数据。

数据 - 日期2015-01-01至2016-12-31

名称 - 公司名称1:50

小时 - 小时1:24(另外2a在2和3之间)

load - variable

x <- NULL
x$Data <- rep(seq(as.Date("2015/1/1"), as.Date("2016/12/31"), "days"), length.out=913750)
x$Name <- rep(rep(1:50, each=731), length.out=913750)
x$hour <- rep(rep(c(1, 2, "2a", 3:24), each=36550),length.out=913750)
x$load <- sample(2000:2500, 913750, replace=T)
x <- data.frame(x)


         Data name hour     load
1  2015-01-01    1    1   8837.050
2  2015-01-01    1    2   6990.952
3  2015-01-01    1    2a  8394.421
4  2015-01-01    1    3   8267.276
5  2015-01-01    1    4   8324.069
6  2015-01-01    1    5   8644.901
7  2015-01-01    1    6   8720.878
8  2015-01-01    1    7   9213.204
9  2015-01-01    1    8   9601.976
10 2015-01-01    1    9   8549.170
11 2015-01-01    1    10  9379.324
12 2015-01-01    1    11  9370.418
13 2015-01-01    1    12  7159.201
14 2015-01-01    1    13  8497.344
15 2015-01-01    1    14  6419.835
16 2015-01-01    1    15  9354.910
17 2015-01-01    1    16  9320.462
18 2015-01-01    1    17  9263.098
19 2015-01-01    1    18  9167.991
20 2015-01-01    1    19  9004.010
21 2015-01-01    1    20  9134.466
22 2015-01-01    1    21  7631.472
23 2015-01-01    1    22  6492.074
24 2015-01-01    1    23  6888.025
25 2015-01-01    1    24  8821.283
25 2015-01-02    1    1   8902.135

我想让它看起来像那样:

    data     hour   name1   name2 .... name49 name50
2015-01-01     1     load   load ....   load  load
2015-01-01     2     load   load ....   load  load
.....
2015-01-01     24    load   load ....   load  load
2015-01-02     1     load   load ....   load  load
.....
2016-12-31     24    load   load ....   load  load

我在spread()tidyr中尝试profile_table_tidy <- spread(profile_table_long, name, load),但收到错误Error: Duplicate identifiers for rows

1 个答案:

答案 0 :(得分:0)

此方法使用reshape2包:

    library("reshape2")
    profile_table_wide = dcast(data = profile_table_long, 
                               formula = Data + hour ~ name, 
                               value.var = "load")

您可能还想为fill选择一个值。祝你好运!