我的orderdate是因素,我想将其转换为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")
但没有任何结果,并且给我新的列为空。任何帮助表示赞赏
答案 0 :(得分:2)
如果您确实拥有"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'))
答案 1 :(得分:1)
您与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")
时间部分将被忽略。