我使用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
。
答案 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"
希望这有帮助。