从因素中获取年份和月份

时间:2013-09-26 09:35:34

标签: r dataframe lubridate

我有一个日期为因子的数据集

我尝试使用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

我该怎么办?

3 个答案:

答案 0 :(得分: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')

答案 1 :(得分:1)

使用as.Date将字符串转换为datetime。使用strftime仅提取year元素。

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

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

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

答案 2 :(得分: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似乎也适用于因素。然而,将日期/时间信息存储为因子是没有意义的。