【问题标题】:Splitting Character String to Extract Date and Time [duplicate]拆分字符串以提取日期和时间
【发布时间】:2020-05-30 07:18:12
【问题描述】:

我在 tibble 的列中有一个字符串,看起来像 Nov 01, 2019 8:00:41 AM CDT

我想创建提到的列,日期和时间的新列。

执行此操作的最佳方法是什么?润滑?

Time <- tibble(Call = 1, Date_Time = 'Nov 01, 2019 8:00:41 AM CDT')
Time %>%
    mutate(Date_Time = mdy(`Contact Start Date/Time`))

我尝试了上面的代码,但是我的新专栏什么都没有,只有“NAs”。

【问题讨论】:

  • 是和不是。这按日期/时间列分为两列,但是如何将时间列保持为时间?
  • 保持时间列为时间是什么意思?喜欢作为特定的时间对象类型?添加一个你想要得到的例子会让你更容易回答

标签: r date character lubridate


【解决方案1】:

1) 如图所示,我们可以使用as.POSIXctas.Date。我不确定你想要什么时间,但在下面提供了一个字符串时间。

library(dplyr)

DF %>% mutate(x = as.POSIXct(x, format = "%b %d, %Y %I:%M:%S %p"),
         date = as.Date(x),
         time = sub(".* ", "", x))
##                     x       date     time
## 1 2019-11-01 08:00:41 2019-11-01 08:00:41

2) chron 包可以分别表示日期和时间:

library(dplyr)
library(chron)

DF %>% 
  mutate(x = as.chron(as.character(x), format = "%b %d, %Y %I:%M:%S %p"),
         date = dates(x),
         time = x - date)

##                     x     date     time
## 1 (11/01/19 08:00:41) 11/01/19 08:00:41

注意

DF <- data.frame(x = "Nov 01, 2019 8:00:41 AM CDT")

【讨论】:

  • 这个社区是最好的。谢谢!
  • 这个社区是最好的。谢谢!对于您的第二个答案,我的时间是 13:00:41,即军事时间下午 1:00,而不是上午 8:00
  • 我已经修改了答案,所以请再试一次。显示输出,在这两种情况下,我都使用DF 得到 8,在最后的注释中重复显示。
  • 时间列被格式化为一个字符。有没有办法让它保持时间?从本质上讲,我正在努力汇总这段时间,以便我可以获得按日期、人员等分组的平均通话时间。
  • R 确实没有单独的时间类,但 chron 中有一个时间类,它在答案的 (2) 中使用。您可以取时间向量的平均值。
【解决方案2】:

我们可以使用lubridates mdy_hms函数将Date_Time转换为POSIXct格式,然后分别使用as.Dateformat提取DateTime

library(dplyr)
library(lubridate)

Time %>%
  mutate(Date_Time = mdy_hms(Date_Time), 
         Date = as.Date(Date_Time), 
         Time = format(Date_Time, "%T"))

#   Call Date_Time           Date       Time    
#  <dbl> <dttm>              <date>     <chr>   
#1     1 2019-11-01 08:00:41 2019-11-01 08:00:41

【讨论】:

  • 这个社区是最好的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-14
相关资源
最近更新 更多