3

我正在从 csv 文件中读取日期值。因此格式会根据 csv 的日期格式而有所不同。如何将任何日期字符串转换为 dd-mm-yyy HH:mm:ss ?

编辑 :

输入格式为:

dd/mm/yyyy HH:mm:ss
dd/mm/yyyy
dd-mm-yyyy HH:mm:ss
dd-mm-yyyy 

mm-dd-yyyy HH:mm:ss
mm-dd-yyyy
mm/dd/yyyy

yyyy-mm-dd HH:mm:ss
yyyy-mm-dd 

我需要将所有这些格式转换为 dd-mm-yyyy HH:mm:ss

4

3 回答 3

1

查看其功能的anytime包- 并且不需要格式字符串anytime

> inputs <- c("12/07/2017 10:11:12", "12/07/2017", "12-07-2017 10:11:12", 
+             "07-12-2017", "2017-12-07 10:11:12", "2017-12-07")
> library(anytime)
> anytime(inputs)
[1] "2017-12-07 10:11:12 CST" "2017-12-07 00:00:00 CST"
[3] "2017-12-07 10:11:12 CST" "2017-07-12 00:00:00 CDT"
[5] "2017-12-07 10:11:12 CST" "2017-12-07 00:00:00 CST"
> 

但是,您不能满足同时接受dmy 和 mdy 的要求。因此,您需要在此处做出选择并提供明确的格式。

一般来说,我强烈建议避免歧义并坚持使用 ymd ISO 格式。为了方便顽固的北美习惯,anytimeanydata接受m-d-y订购但很危险。

同样,只有您可以判断3-4-5是 4 月 3 日还是 3 月 4 日,并且您需要指定。

于 2017-12-07T12:47:06.017 回答
0

as.Date()将字符串转换为Date对象。您需要将其format参数调整为 csv 具有的特定格式。

于 2012-11-30T09:24:02.300 回答
0

尝试“润滑”包。这里 A_1.csv 有两种格式。

Data <-read.csv("Al_1.csv") # import data
str(Data)
a = NULL # create a null object
library(lubridate)
a$Date <- mdy_hm(Data$Date) # store dd/mm/yyyy HH:mm:ss objects here
a$Price <- Data$Price # get respective values(it could by any other column)
b = NULL
b$Date <- mdy(Data$Date)
b$Price <- Data$Price

a <- as.data.frame(a)
b <- as.data.frame(b)


a <- a[is.na(a$Date)==FALSE,] # those with NA had diffrent formats remove it
b <- b[is.na(b$Date)==FALSE,]

b$Date <- as.POSIXlt(b$Date)# change your other format also to UTC


x <- rbind(a,b)
str(x)
x <- ts(x)
于 2017-12-07T12:29:14.510 回答