将字符更改为具有不同格式的日期(Win和Mac)

问题描述 投票:1回答:2

我在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解决方案;)

r dplyr
2个回答
1
投票

为了节省时间,最好使用其他日期格式,例如POSIXltPOSIXct。您还可以扩展格式字符串以包括时间(例如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")

至于处理不同的格式,因为您自己并没有明确的格式,所以我建议使用一个可能的格式向量,然后依次尝试每种格式,直到一个可行为止。


0
投票

您可以使用lubridateparse_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"
© www.soinside.com 2019 - 2024. All rights reserved.