繁体   English   中英

将格式m / d / yy的订购日期转换为R中的YYYY-MM-DD

[英]convert orderdate of format m/d/yy to YYYY-MM-DD in R

我的订单日期是有影响的,我想将其从mm / dd / yy格式转换为YYYY-MM-DD格式。

 orderdate : Factor w/ 155932 levels "1/1/2017 1:05:00 AM",..: 41 1 1 89 100 102 106 107 119 122 ...

我尝试了几件事:

orders2017$newdate <- (factor(orders2017$orderdate))
orders2017$newdate1 <- as.Date(orders2017$newdate,format="%Y-%m-%d")

但是什么都没有解决,所以给我新列为空。 任何帮助表示赞赏

如果您确实有类似"1/1/2017 1:05:00 AM"那么这些不是日期,而是日期时间,因此,您必须为日期和时间部分指定格式字符。

因此,首先您需要通过指定日期时间的所有部分,将日期时间转换成R可以理解的格式(例如POSIXct):

test <- as.POSIXct("1/1/2017 1:05:00 AM", format = '%m/%d/%Y %I:%M:%S %p')
test

> test
[1] "2017-01-01 01:05:00 CST"

如果您不熟悉上面使用的所有格式占位符,请参见?strftime ,并注意使用%I%p

然后,您可以将POSIXct向量转换为所需的日期格式

format(test, format = '%Y-%m-%d')

> format(test, format = '%Y-%m-%d')
[1] "2017-01-01"

给您带来的麻烦是R已将您的字符日期时间转换为一个因子,因此您需要先将它们转换回字符向量,然后再转换为日期时间。 例如(未经测试,因为您未提供示例数据)

orders2017 <- transform(orders2017,
                        orderdate = as.POSIXct(as.character(orderdate),
                                               format = '%m/%d/%Y %I:%M:%S %p'))
orders2017 <- transform(orders2017,
                        newdate = format(orderdate, format = '%Y-%m-%d'))

您真的很喜欢as.Date(orders2017$newdate,format="%Y-%m-%d") ,只需要使format字符串与实际格式匹配即可。

您的实际格式为mm / dd / YYYY,因此请使用%m/%d/%Y作为格式字符串:

as.Date("1/1/2017 1:05:00 AM", format = "%m/%d/%Y")
# [1] "2017-01-01"

然后,默认打印Date格式的对象就是您想要的。

因此,对于您的数据,

orders2017$newdate1 <- as.Date(orders2017$newdate,format="%Y/%m/%d")

时间部分将被忽略。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM