我的数据集中有一个名为timestamp的变量,它是一种形式。 MYDATA $时间戳
2013-08-01 12:00:00
2013-08-01 12:00:00
2013-08-01 12:00:00
我想修改它们并将其更改为仅dd-mm-yy格式
dates<-strptime(mydata$timestamp, format="%d:%m:%y")
打印日期仅导致NA。不知道为什么。
有人可以帮忙吗?
提前致谢
答案 0 :(得分:8)
在某些编程语言中,内部日期具有关联的格式,您可以更改该格式而不更改日期的内部表示。这就是为什么你像问题那样提出问题的原因,但这不是R的工作方式。在R中,您可以将日期表示为字符串或R理解的实际日期类,例如Date
或POSIXlt
。 R理解的类没有与之关联的任何特定输出格式。
您的输入数据似乎是日期的字符串表示形式。您似乎希望它以不同的字符串表示形式出现。 strptime()
会从字符串更改为POSIXlt
,但此数据类型的格式不是这样或那样。如果要将其重新转换为字符串,则需要使用其他命令。在Pascal的示例中,该函数是format()
。
好的,您希望使用strptime()
将其转换为R日期,然后使用format()
将其重新转换为字符串。很好,但你必须有正确的论点。 strptime()
的第二个参数是一组字符,用于通知函数当前格式是什么。您的参数"%d:%m:%y"
与您的数据远非类似。这就是获得NA
的原因。正如Pascal指出的那样,正确的格式为"%Y-%m-%d %H:%M:%S"
。检查strptime()
的帮助文件,查看格式化字符串中的符号含义。
就个人而言,我会避免strptime()
所做的所有当地时间的事情,只使用R的基本Date()
类。我的解决方案是
dates <- format(as.Date(mydata$timestamp,format="%Y-%m-%d %H:%M:%S"),format="%d-%m-%y")
请注意format
中的as.Date()
参数通知函数传入数据格式是什么,format
中的format()
参数告诉它你想要的传出格式是。
答案 1 :(得分:4)
如果您想要dd-mm-yy
格式,则需要format(mydata$timestamp, "%d-%m-%y")
。例如:
x <- strptime(c("2006-01-08 10:07:52", "2006-08-07 19:33:02"), "%Y-%m-%d %H:%M:%S", tz = "EST5EDT")
[1] "2006-01-08 10:07:52 EST" "2006-08-07 19:33:02 EDT"
format(x, "%d-%m-%y")
[1] "08-01-06" "07-08-06"