2013-01-23 68 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"),]