Reshaping a column from a data frame into several columns using R [duplicate]

杀马特。学长 韩版系。学妹 提交于 2019-12-20 06:39:20

问题


I have a database that looks like this:

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

What I would like is to reshape the station column from this data frame into several columns (in this example it will be 3 columns) and calculate the number of time each station was recorded in each date/time row. However, I would like to keep the original date/time column from the data base. If a station was not recorded in one specific date/time, then I want to assign a value of zero.

Ideally, I would like an output like this:

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

回答1:


You can try to use function dcast() from library 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



回答2:


You could use the function xtabs:

xtabs( ~ date + stations, df)


来源:https://stackoverflow.com/questions/14030283/reshaping-a-column-from-a-data-frame-into-several-columns-using-r

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!