[英]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.