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

error in getting the correct date using strptime in R

我正在使用 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.

你有一个四位数的年份所以你需要使用 %Y

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

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

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

为方便起见,我们可以先将字符串转换为 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"

希望这对您有所帮助。