按小时与天重塑数据,使用第三列的值

Reshape data by hour vs day, with value of a third column

我正在尝试对每小时的气候数据进行一些重塑,但我无法正确... 这是数据,一天变量(365 级。+/- 1 取决于年份),一小时变量(24 级),一个数字温度(+/- 8760 obs)。

head(df)
####         .day .hour temperature
#### 2 2013-01-01     1          19
#### 3 2013-01-01     2          19
#### 4 2013-01-01     3          18
#### 5 2013-01-01     4          18

我的预期输出是这样的 data.frame,但我需要的不是值一(长度),而是内部的温度值...

        .day 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
1 2013-01-01 1 1 1 1 1 1 1 1 1 1  1  1  1  1  1  1  1  1  1  1  1  1  1  1
2 2013-01-02 1 1 1 1 1 1 1 1 1 1  1  1  1  1  1  1  1  1  1  1  1  1  1  1
3 2013-01-03 1 1 1 1 1 1 1 1 1 1  1  1  1  1  1  1  1  1  1  1  1  1  1  1
4 2013-01-04 1 1 1 1 1 1 1 1 1 1  1  1  1  1  1  1  1  1  1  1  1  1  1  1

此输出是用 dcast(.day~.hour) 生成的,我也尝试了一些 tidyr 但没有成功。我怎样才能做到这一点?如果某处缺少一些行(缺少一天等)怎么办?谢谢

要将数据从长格式重新格式化为宽格式,我们可以使用 tidyr 具有相关功能 spread。帮助文件在这里有足够的例子:http://cran.r-project.org/web/packages/tidyr/tidyr.pdf#page.14

require(tidyr)
spread(df, .hour, temperature, fill = NA) #fill any missing data with NA 

此处全面介绍了可用于实现相同更改的其他选项: