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

我能做些什么?

4

3 回答 3

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')
于 2013-09-26T09:45:41.553 回答
1

使用 as.Date 将字符串转换为日期时间。使用 strftime 仅提取年份元素。

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

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

    strftime(
        timeformatted,
        "%Y"
    )
    #[1] "2010"
于 2013-09-26T09:48:25.910 回答
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 似乎也适用于因子。然而,将日期/时间信息存储为因素是没有意义的。

于 2013-09-26T09:50:44.453 回答