2013-09-26 144 views
0

我有一個日期作爲因素的數據集獲得年份和月份從要素

我使用lubridate包解壓,以創造在我data.frame新列的年份和月份嘗試過,但它不起作用。

#load packages 
    library(lubridate) 

    #Create Dataset 
    Data <- read.csv("C:/Users/TheKaspa/Dropbox/Bocconi/LM - Management/Tesi/WIP/Database/Elab.csv", header=TRUE) 

#Get the year 
Y <- year(Data$Activity_close) 
Y 

結果是

[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
[26] 1 1 1 1 1 1 1 1 1 1 1 1 31 1 1 1 1 1 1 1 1 1 1 1 1 
[51] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
[76] 1 1 1 1 1 1 31 31 1 1 1 1 31 31 31 31 31 1 1 1 1 1 1 1 1 
[101] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 31 31 31 31 
[126] 31 31 31 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
[151] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
[176] 1 1 1 1 1 1 1 1 1 31 31 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
[201] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
[226] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
[251] 1 1 31 1 31 1 31 1 1 1 1 31 1 1 1 31 31 31 31 31 31 31 1 1 1 
[276] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 31 31 
[301] 31 31 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
[326] 1 1 1 1 1 1 

但數據(來自summary樣品)

1/12/2010 00:00:00 
1/5/2010 00:00:00 
1/6/2010 00:00:00 
1/12/2011 00:00:00 
1/5/2011 00:00:00 
1/10/2010 00:00:00 

我能做些什麼?

回答

1

將字符串轉換使用as.Date爲datetime 。使用strftime只提取年份元素。

time <- "1/12/2010 00:00:00" 

    timeformatted <- as.Date(time,"%d/%m/%Y %H:%M:%S") 

    strftime(
     timeformatted, 
     "%Y" 
    ) 
    #[1] "2010" 
2

在提取日期元素之前,您應該將因子轉換爲常量日期。例如在這裏,我使用dmy_hms

library(lubridate) 
year(dmy_hms('1/12/2010 00:00:00')) 
month(dmy_hms('1/12/2010 00:00:00')) 

還要注意,沒有必要使用lubridate,就可以實現同樣的事情在基礎R:

as.POSIXlt('1/12/2010 00:00:00',format='%d/%m/%Y %H:%M:%S') 
0

您需要將日期格式設置爲適當的日期。

Dates <- readLines(textConnection("1/12/2010 00:00:00 
1/5/2010 00:00:00 
1/6/2010 00:00:00 
1/12/2011 00:00:00 
1/5/2011 00:00:00 
1/10/2010 00:00:00")) 

library(lubridate) 

year(Dates) 
# [1] 1 1 1 1 1 1 
ProperDates <- as.POSIXct(Dates, format="%d/%m/%Y %H:%M:%S") 
year(ProperDates) 
# [1] 2010 2010 2010 2011 2011 2010 

又見

?strptime 
?as.POSIXct 

- 我正要補充一點,你可能需要確保輸入的是字符向量,而不是一個因素,但as.POSIXct似乎與因素來工作太。儘管如此,將日期/時間信息存儲爲因素是沒有意義的。