使用R将数据框架中的一列重塑为多个列



我有一个数据库,看起来像这样:

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列),并计算每个站点在每个日期/时间行中记录的时间数。但是,我想保留数据库中的原始日期/时间列。如果某个电台在某个特定的日期/时间内没有被记录,那么我要赋值为0。

理想情况下,我希望这样的输出:

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

您可以尝试使用库reshape2中的dcast()函数。

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

您可以使用函数xtabs:

xtabs( ~ date + stations, df)

相关内容

  • 没有找到相关文章

最新更新