我有一个像这样的字符串向量。我想将它们转换为日期。时区的人物构成了麻烦。
> a
[1] "07/17/2014 5:01:22 PM EDT" "7/17/2014 2:01:05 PM PDT" "07/17/2014 4:00:48 PM CDT" "07/17/2014 3:05:16 PM MDT"
如果我使用:strptime(a, "%d/%m/%Y %I:%M:%S %p %Z")
,我会[1] NA
如果我省略"%Z"对于时区,并使用此:
strptime(a, "%m/%d/%Y %I:%M:%S %p", tz = "EST5EDT")
我
[1] "2014-07-17 17:01:22 EDT"
由于我的字符串包含各种时区--PDT,CDT,EDT,MDT,因此我无法将所有时区默认为EST5EDT
。要克服的一种方法是将矢量分成每个时区的不同矢量,删除字母PDT / EDT等,并使用strptime
- " EST5EDT"来应用正确的时区。 ," CST6CDT"有没有其他方法可以解决这个问题?
答案 0 :(得分:0)
如果日期始终是字符向量元素的第一部分,并且始终跟随时间,则可以使用空格分割元素。如果只需要日期:
dates <- sapply(a, function(x) strsplit(x, split = " ")[[1]][1])
dates <- as.Date(as.character(dates), format = "%m/%d/%Y")
[1] "2014-07-17" "2014-07-17" "2014-07-17" "2014-07-17"
如果还需要时间:
datetime <- sapply(a, function(x) paste(strsplit(x, split = " ")[[1]][1:3],
collapse = " "))
datetime <- strptime(as.character(datetime), format = "%m/%d/%Y %I:%M:%S %p")
[1] "2014-07-17 17:01:22 CEST" "2014-07-17 14:01:05 CEST"
您可以在此处使用tz
参数设置不同的时区。