我有一个如下所示的数据库:
start<-as.POSIXct("2012-01-15") interval<-60 end<-start+as.difftime(31,units="days") date<-seq(from=start,by=interval*60, to=end) # date/time information l<-length(date) stations<-as.factor(rep(1:3,len=l)) # stations df<-data.frame(date,stations) # data frame
我想要的是将此数据框中的站列重新整形为多个列(在本例中为3列)并计算每个日期/时间行中每个站记录的时间。但是,我想保留数据库中的原始日期/时间列。如果没有在一个特定的日期/时间记录电台,那么我想指定一个零值。
理想情况下,我想要一个像这样的输出:
date 1 2 3 2012-01-15 0:00 1 0 0 2012-01-15 1:00 0 1 0 2012-01-15 2:00 0 0 1 2012-01-15 3:00 1 0 0 2012-01-15 4:00 0 1 0 2012-01-15 5:00 0 0 1 2012-01-15 6:00 1 0 0 2012-01-15 7:00 0 1 0 2012-01-15 8:00 0 0 1 2012-01-15 9:00 1 0 0 2012-01-15 10:00 0 1 0
答案 0 :(得分:2)
您可以尝试使用库dcast()
中的函数reshape2
。
library(reshape2)
dcast(df,date~stations,length)
date 1 2 3
1 2012-01-15 00:00:00 1 0 0
2 2012-01-15 01:00:00 0 1 0
3 2012-01-15 02:00:00 0 0 1
4 2012-01-15 03:00:00 1 0 0
答案 1 :(得分:2)
您可以使用函数xtabs
:
xtabs( ~ date + stations, df)