【问题标题】:extracting hour and minute from character column in r [duplicate]从r中的字符列中提取小时和分钟[重复]
【发布时间】:2016-07-04 12:04:58
【问题描述】:

我有以下数据框,数据集已经从数据库表中导入,created_at 列具有字符类型:

sale_id      created_at
1               2016-05-28T05:53:31.042Z
2               2016-05-30T12:50:58.184Z
3               2016-05-23T10:22:18.858Z
4               2016-05-27T09:20:15.158Z
5               2016-05-21T08:30:17.337Z
6               2016-05-28T07:41:14.361Z

如何从 created_at 列中仅提取小时和分钟,最好使用基本 r 库?我需要稍后将小时和分钟粘贴在一起并将其作为新列。

【问题讨论】:

  • substr(df$created_at, 12, 16) 或者如果你不需要: 那么gsub(substr(df$created_at, 12, 16))

标签: r datetime dataframe data-analysis posixlt


【解决方案1】:

我们可以使用lubridate中的便捷函数将character列转换为DateTime,并用format提取小时和分钟

library(lubridate)
v1 <- ymd_hms("2016-05-28T05:53:31.042Z")
format(v1, "%H:%M")
#[1] "05:53"

或者只使用base R

format(as.POSIXct("2016-05-28T05:53:31.042z", format = "%Y-%m-%dT%H:%M:%S"),  "%H:%M")
#[1] "05:53"

其他选项包括gsub

gsub(".*T|:\\d+\\..*", "", "2016-05-28T05:53:31.042z")
#[1] "05:53"

【讨论】:

  • 不使用 lubridate 可以做到吗?
  • @sanaz 是的,有可能
  • 这怎么可能?
  • @akrun 看起来我们都用过这个? stackoverflow.com/questions/28207382/… 可能是个骗子。
  • @Hack-R 我没有提到它,但如果这是一个骗子,你可以骗它
【解决方案2】:

仅使用基础 R 库:

format(as.POSIXct("2016-05-28T05:53:31.042z", format = "%Y-%m-%dT%H:%M:%S"),  "%H:%M")

05:31

这似乎是 UTC 格式。有关解析该格式的更多详细信息,请参阅this

让我也以Sys.Date() 为例:

format(as.POSIXlt(Sys.time(), "America/New_York"), "%H:%M")

08:15

使用无限好 lubridate 库:

require(lubridate)
minute(ymd_hms("2016-05-28T05:53:31.042Z"))

53

second(ymd_hms("2016-05-28T05:53:31.042Z"))

31.042

【讨论】:

  • 这就是为什么我最好询问基本 R 包
  • @sanaz 好的,没问题,我已经更新了问题,并且还会添加更多内容
  • @sanaz 是的,这就是为什么我说我不知道​​它是什么时区但我会更新它(我添加了另一个带有 Sys.Date 的示例)。不过我发现它是 GMT 并再次更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-11
  • 1970-01-01
相关资源
最近更新 更多