我想从字符向量中提取时间

时间:2019-03-18 16:46:19

标签: r datetime

我将日期和时间戳记作为字符变量

"2018-12-13 11:00:01 EST" "2018-10-23 22:00:01 EDT" "2018-11-03 14:15:00 EDT" "2018-10-04 19:30:00 EDT" "2018-11-10 17:15:31 EST" "2018-10-05 13:30:00 EDT"

如何从此字符向量中去除时间?

PS:有人可以帮忙吗?我尝试使用strptime,但结果是获得NA

4 个答案:

答案 0 :(得分:1)

不清楚是要日期还是时间,但是如果要日期,as.Date会忽略日期之后的任何垃圾,因此:

x <- c("2018-12-13 11:00:01 EST", "2018-10-23 22:00:01 EDT")
as.Date(x)
## [1] "2018-12-13" "2018-10-23"

从输入向量Date中获得x向量就足够了。不使用任何软件包。

如果您想要时间,那么:

read.table(text = x, as.is = TRUE)[[2]]
## [1] "11:00:01" "22:00:01"

如果您希望每个部分的数据框都在单独的列中,则:

read.table(text = x, as.is = TRUE, col.names = c("date", "time", "tz"))
##         date     time  tz
## 1 2018-12-13 11:00:01 EST
## 2 2018-10-23 22:00:01 EDT

答案 1 :(得分:1)

我认为OP希望从日期时间变量中提取时间(按问题标题)。

x <- "2018-12-13 11:00:01 EST"

as.character(strptime(x, "%Y-%m-%d %H:%M:%S"), "%H:%M:%S")
[1] "11:00:01"

另一个选择:

library(lubridate)

format(ymd_hms(x, tz = "EST"), "%H:%M:%S")
[1] "11:00:01"

答案 2 :(得分:0)

lubridate软件包使一切变得如此简单:

library(lubridate)

x <- "2018-12-13 11:00:01 EST"

as_date(ymd_hms(x))

答案 3 :(得分:0)

您可以使用as.Date函数并指定格式

> as.Date("2018-12-13 11:00:01 EST", format="%Y-%m-%d")
[1] "2018-12-13"

如果所有值都在向量中:

x = c("2018-12-13 11:00:01 EST", "2018-10-23 22:00:01 EDT", 
      "2018-11-03 14:15:00 EDT", "2018-10-04 19:30:00 EDT", 
      "2018-11-10 17:15:31 EST", "2018-10-05 13:30:00 EDT")

> as.Date(x, format="%Y-%m-%d")
[1] "2018-12-13" "2018-10-23" "2018-11-03" "2018-10-04" "2018-11-10"
[6] "2018-10-05"