2013-09-26 240 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似乎与因素来工作太。尽管如此,将日期/时间信息存储为因素是没有意义的。