我有3列数据,我想重塑成一个矩阵,其中列为created_at
,行为citibike_station_id
head(sample) available_bike_count created_at citibike_station_id 1 21 2015-10-08 00:00:00 72 2 7 2015-10-08 20:10:00 72 3 18 2015-10-08 06:50:00 72 4 19 2015-10-08 10:10:00 72 5 18 2015-10-08 02:30:00 72 6 17 2015-10-08 05:00:00 72 > dim(sample) [1] 69511 3
因此,我必须按created_at
和citibike_station_id
> length(unique(sample$created_at))
[1] 145
> length(unique(sample$citibike_station_id))
[1] 482
created_at
表示10分钟的时间间隔 - 应该有145列,因为有145个唯一的时间间隔(代表一天的数据);并且应该有482行,因为有citibike_station_id
的482个唯一值。
这是数据最终应该是什么样子的示例 - 但是,在此示例中,列名来自不同的日期和年份。
head(data[1:6]) station_id X2014.08.18.20.00.00 X2014.08.18.20.10.00 X2014.08.18.20.20.00 1 1 1 0 0 2 2 18 18 19 3 3 5 4 4 4 4 21 20 20 5 5 9 10 8 6 6 9 9 9 X2014.08.18.20.30.00 X2014.08.18.20.40.00 1 2 1 2 18 18 3 4 4 4 21 22 5 5 7 6 9 9
如何使用dplyr
和tidyr
执行此操作?
library(dplyr)
library(tidyr)
matrix <- sample %>%
group_by(created_at, citibike_station_id)%>%
spread(citibike_station_id, created_at)
然而这不起作用。 reshape2
包提供更好的解决方案吗?