我在data.frame中有几个日期变量。
他们看起来像这样:
[1] "10/14/18 17:55:28" "10/15/18 19:27:56"
[3] "11/04/18 15:47:46" "Thu Feb 7 14:51:55 2019"
[5] "Thu Feb 7 17:14:15 2019" "Thu Feb 7 15:46:09 2019"
[7] "Thu Feb 7 11:42:27 2019" "Thu Feb 7 13:24:16 2019"
[9] "Thu Feb 7 18:02:29 2019" "Mon Oct 15 08:48:43 2018"
[11] "10/17/18 17:08:38" "12/08/18 08:08:11"
[13] "10/11/18 21:25:30" "10/14/18 19:15:30"
[15] "10/16/18 11:18:01" "10/16/18 18:19:27"
[17] "Tue Oct 16 19:49:24 2018" "Wed Oct 17 21:36:32 2018"
[19] "Sat Oct 13 11:22:35 2018" "Fri Dec 7 17:12:33 2018"
目前,这是一个字符变量。我想用as.Date更改它,以便彼此减去变量。
我已经找到了:
as.Date( DATE$Sess1, format = "%m/%d/%y")
我希望不仅保留日期,还保留时间。真正的问题在于它们包括Apple和Windows格式,这使其变得更加复杂。
我希望使用dplyr解决方案;)
为了节省时间,最好使用其他日期格式,例如POSIXlt
或POSIXct
。您还可以扩展格式字符串以包括时间(例如format = "%m/%d/%y %H:%M:%S"
)-有关这些代码的更多详细信息,请参见https://astrostatistics.psu.edu/su07/R/html/base/html/strptime.html。
as.POSIXlt(DATE$Sess1, format = "%m/%d/%y %H:%M:%S")
至于处理不同的格式,因为您自己并没有明确的格式,所以我建议使用一个可能的格式向量,然后依次尝试每种格式,直到一个可行为止。
您可以使用lubridate
的parse_date_time
并包括它可能采用的所有格式。
x <- c("10/14/18 17:55:28" , "10/15/18 19:27:56" ,
"11/04/18 15:47:46" , "Thu Feb 7 14:51:55 2019",
"Thu Feb 7 17:14:15 2019", "Thu Feb 7 15:46:09 2019")
lubridate::parse_date_time(x,c('mdyT', 'amdTY'))
#[1] "2018-10-14 17:55:28 UTC" "2018-10-15 19:27:56 UTC" "2018-11-04 15:47:46 UTC"
#[4] "2019-02-07 14:51:55 UTC" "2019-02-07 17:14:15 UTC" "2019-02-07 15:46:09 UTC"
阅读?parse_date_time
以了解不同的格式详细信息。
要获取日期,您可以在其周围加上as.Date
。
as.Date(lubridate::parse_date_time(x,c('mdyT', 'amdTY')))
#[1] "2018-10-14" "2018-10-15" "2018-11-04" "2019-02-07" "2019-02-07" "2019-02-07"