2013-01-23 41 views
17

我有一个数据集称为EPL2011_12。我想通过按日期对原始数据进行子集化来创建新的数据集。日期位于名为Date的列中。日期采用DD-MM-YY格式。按日期排序的子集

我已经试过

EPL2011_12FirstHalf <- subset(EPL2011_12, Date > 13-01-12) 

EPL2011_12FirstHalf <- subset(EPL2011_12, Date > "13-01-12") 

但每次收到此错误消息。

Warning message: 
In Ops.factor(Date, 13- 1 - 12) : > not meaningful for factors 

我想这意味着R是治疗像文本而不是数字,为什么它不会工作?

+2

这意味着你的Date列被作为一个因子读入(大概在使用'read.table'或类似的函数时)。您需要使用例如'as.Date'。 – joran

+0

不要忘记'as.character()',例如使用'as.Date(as.character(X),“%d-%m-%y”)'。 –

+0

@DirkEddelbuettel是不是有一个'as.Date.factor'方法,或者我误解了什么......? – joran

回答

29

嗯,它显然不是一个数字,因为它有破折号。该错误消息和两个意见告诉你,这是一个因素,但评论员显然等待,让在消息接收德克更是建议你这样做:。

EPL2011_12$Date2 <- as.Date(as.character(EPL2011_12$Date), "%d-%m-%y") 

之后,你可以这样做:

EPL2011_12FirstHalf <- subset(EPL2011_12, Date2 > as.Date("2012-01-13")) 

ř日期功能假定格式为 “YYYY-MM-DD” 或 “YYYY/MM/DD”。你需要像类一样比较:日期到日期,或字符到字符。

+0

工作。谢谢大家。 – user1899793

+1

@ user1899793,然后务必将迪文的答案标记为已接受。 – A5C1D2H2I1M1N2O1R2T1

+0

如果还有像2013/01/01 13:34:59这样的其他日期类型,请参阅https://stat.ethz.ch/R-manual/R-devel/library/base/html/strptime.html更多格式细节。 – huangli

5

你应该对日期变量做的第一件事是确认R读取它作为日期。要做到这一点,对于称为日期变量(即矢量/列),在称为EPL2011_12数据帧,输入

class(EPL2011_12$Date)

输出应读[1]“日期”。如果没有,你应该通过输入

EPL2011_12$Date <- as.Date(EPL2011_12$Date, "%d-%m-%y")

注意其格式化为一个日期,日期格式中的连字符(“%D-%间%y”)的上面,也可以斜线( “%d /%米/%Y”)。确认R将其视为日期。如果没有,请尝试使用不同的格式化命令

EPL2011_12$Date <- format(EPL2011_12$Date, format="%d/%m/%y")

一旦你日期格式拥有它,你可以使用subset命令,或者您可以使用括号

WhateverYouWant <- EPL2011_12[EPL2011_12$Date > as.Date("2014-12-15"),]