R中的日期转换

时间:2015-09-21 15:11:17

标签: r

我面临一个非常小的问题,但无论如何都无法解决它。

当我导入具有日期的csv文件时,日期将以“%Y-%m-%d”格式显示。但我希望它是“%d-%m-%Y”格式。我尝试了“as.Date”来改造它。但它不起作用。

导入后数据结构如下所示:

Date        Share_Val
21/01/2015   20
22/01/2015   19
23/01/2015   21
24/01/2015   23
25/01/2015   26

但是当我通过read.csv导入文件时,数据如下所示:

Date        Share_Val
01/21/2015   20
01/22/2015   19
01/23/2015   21
01/24/2015   23
01/25/2015   26

我试过了rubridate。但它没有帮助。 Sam的结果正是我想要的。但是,当我尝试以下内容时,它不会出现

data$date<-format(as.Date(data$date,"%m/%d/%Y"))

有人可以给我任何建议吗?

2 个答案:

答案 0 :(得分:2)

看看这是否有帮助。请注意stringsAsFactors。如果您的Date字段是一个因素,则首先需要data$Date <- as.character(data$Date)

data <- data.frame(Date = c("21/01/2015", "22/01/2015", "23/01/2015", 
        "24/01/2015", "25/01/2015"), Share_Val=c(20, 19, 21, 23, 26), 
         stringsAsFactors=F)

format(as.Date(data$Date, "%d/%m/%Y"), "%d-%m-%Y")
[1] "21-01-2015" "22-01-2015" "23-01-2015" "24-01-2015" "25-01-2015"

答案 1 :(得分:1)

评论太长了。

我认为你可能会误解Dates如何在R中工作。类Date的变量(或列)在内部存储为1970-01-01以来的天数。当您打印Date变量时,它将使用%Y-%m-%d格式显示。 as.Date(...)函数将字符转换为日期。 format=...参数控制如何解释字符串,而不是如何显示结果,如:

as.Date("02/05/2015", format="%m/%d/%Y")
# [1] "2015-02-05"
as.Date("02/05/2015", format="%d/%m/%Y")
# [1] "2015-05-02"

因此,在第一种情况下,字符串在5月2日的第二天被解释为05年2月。请注意,在这两种情况下,结果都是以%Y-%m-%d格式显示(打印)。