在R中使用strptime获取正确日期时出错

时间:2016-03-25 23:49:02

标签: r strptime

我使用strptime提取日期,结果是错误的一年 以下代码中的错误在哪里:

strptime('8/29/2013 14:13', "%m/%d/%y") 
[1] "2020-08-29 PDT"

将日期和时间作为单独的列提取的其他方法有哪些。 我的数据采用这种格式 - 8/29/2013 14:13 我想将其拆分为两列,一列是8/29/2013,另一列是14:13

2 个答案:

答案 0 :(得分:2)

您有四位数的年份,因此您需要使用%Y

strptime('8/29/2013 14:13', "%m/%d/%Y" )
[1] "2013-08-29 CEST"

您真的希望将数据和时间放在不同的列中吗?处理单个日期时间对象通常要容易得多。

答案 1 :(得分:1)

这是将时间和日期与字符串分开的一种可能性。

为方便起见,我们可以先将字符串转换为POSIX对象:

datetime <- '8/29/2013 14:13'
datetime.P <- as.POSIXct(datetime, format='%m/%d/%Y %H:%M')

然后我们可以使用as.Date()从此对象中提取日期,并使用format()以所需格式显示该日期:

format(as.Date(datetime.P),"%m/%d/%Y")
#[1] "08/29/2013"

要单独存储时间,我们可以使用例如strftime()函数:

strftime(datetime.P, '%H:%M')
#[1] "14:13"

最后一个函数(strftime())没有向量化,这意味着如果我们正在处理包含多个字符串的向量datetime,其中日期和时间的格式如OP所述,应该被包装成像sapply()这样的循环来从每个字符串中提取时间。

示例

datetime <- c('8/29/2013 14:13', '9/15/2014 12:03')
datetime.P <- as.POSIXct(datetime, format='%m/%d/%Y %H:%M')
format(as.Date(datetime.P),"%m/%d/%Y")
#[1] "08/29/2013" "09/15/2014"
sapply(datetime.P, strftime, '%H:%M')
#[1] "14:13" "12:03"

希望这有帮助。