在R中重新排列/识别日期变量

时间:2012-12-16 23:20:49

标签: r

data=read.csv("filelocation",header=T)

obs timedate   weight
504 2010-10-04 52495    
505 2010-10-01 53000    
506 2010-09-30 52916    
507 2010-09-29 52785    
508 2010-09-28 53348    
509 2010-09-27 52885    
510 2010-09-24 52174    
511 2010-09-23 51461    
512 2010-09-22 51286    
513 2010-09-21 50968    
514 2010-09-20 49250    

我在R中加载了一些数据,但CSV文件中的数据是从最新的 - >最旧的组织的,我想重新安排到最新的>最旧的。我怎么做?我还尝试格式化“日期”变量,以便R可以识别我加载的数据作为时间序列,以区别/滞后“重量”变量,但我没有运气。我究竟做错了什么?我正在使用

timedate=as.Date(data$timedate,"%Y-%m-%d")

谢谢!

2 个答案:

答案 0 :(得分:2)

你走了:

R> dat <- read.table(file=textConnection("obs     timedate   Weight
504 2010-10-04  52495   
505 2010-10-01  53000   
506 2010-09-30  52916   
507 2010-09-29  52785   
508 2010-09-28  53348   
509 2010-09-27  52885   
510 2010-09-24  52174   
511 2010-09-23  51461   
512 2010-09-22  51286   
513 2010-09-21  50968   
514 2010-09-20  49250"), header=TRUE)
+ + + + + + + + + + + 
R>

现在将日期解析为Date并重新显示以进行检查:

R> dat$timedate <- as.Date(as.character(dat$timedate))
dat
   obs   timedate  Weight
1  504 2010-10-04  52495
2  505 2010-10-01  53000
3  506 2010-09-30  52916
4  507 2010-09-29  52785
5  508 2010-09-28  53348
6  509 2010-09-27  52885
7  510 2010-09-24  52174
8  511 2010-09-23  51461
9  512 2010-09-22  51286
10 513 2010-09-21  50968
11 514 2010-09-20  49250
R>

只需按日期重新排序:

R> dat[order(dat$timedate),]
   obs   timedate  Weight
11 514 2010-09-20  49250
10 513 2010-09-21  50968
9  512 2010-09-22  51286
8  511 2010-09-23  51461
7  510 2010-09-24  52174
6  509 2010-09-27  52885
5  508 2010-09-28  53348
4  507 2010-09-29  52785
3  506 2010-09-30  52916
2  505 2010-10-01  53000
1  504 2010-10-04  52495
R> 

答案 1 :(得分:2)

使用timedate参数导入时,您还可以将Date列设置为colClasses

dat <- read.csv(
                "filelocation",
                header=TRUE,
                colClasses=c("numeric","Date","numeric")
               )

...然后根据@Dirk的建议重新排序:

dat <- dat[order(dat$timedate),]