error in getting the correct date using strptime i

2020-05-05 17:49发布

I'm using strptime to extract date and the result is a wrong year Where is the error in the below code:

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

What are the other ways to extract date and time as separate columns. The data I have is in this format - 8/29/2013 14:13 I want to split this into two columns, one is 8/29/2013 and the other is 14:13.

标签: r strptime
2条回答
冷血范
2楼-- · 2020-05-05 18:24

You have a four digit year so you need to use %Y

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

Do you really want data and time in separate columns? It usually much easier to deal with a single date-time object.

查看更多
来,给爷笑一个
3楼-- · 2020-05-05 18:40

Here's one possibility to separate time and date from the string.

For convenience, we could first convert the string into a POSIX object:

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

Then we can use as.Date() to extract the date from this object and use format() to display it in the desired format:

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

To store the time separately we can use, e.g., the strftime() function:

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

The last function (strftime()) is not vectorized, which means that if we are dealing with a vector datetime containing several character strings with date and time in the format as described in the OP, it should be wrapped into a loop like sapply() to extract the time from each string.


Example

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"

Hope this helps.

查看更多
登录 后发表回答