删除时间戳结束

时间:2018-02-07 20:18:39

标签: r timestamp substring gsub stringr

我有一个时间戳矢量,其中"+00"我想删除

> test
[1] "2018-01-02 06:40:00+00" "2018-01-02 06:50:00+00" "2018-01-02 07:00:00+00"
[4] "2018-01-02 07:10:00+00" "2018-01-02 07:20:00+00" "2018-01-02 07:30:00+00"

他们已经在角色类

> class(test)
[1] "character"

我申请了gsub()

> gsub("+.*","",test)
[1] "" "" "" "" "" ""

但这并没有提供所需的输出 - 我做错了什么?

dput(test)
c("2018-01-02 06:40:00+00", "2018-01-02 06:50:00+00", "2018-01-02 07:00:00+00", 
"2018-01-02 07:10:00+00", "2018-01-02 07:20:00+00", "2018-01-02 07:30:00+00")

3 个答案:

答案 0 :(得分:4)

您可以提取所有内容但+00。使用$使正则表达式适合字符串最后一部分的模式。

> gsub("(^.*)\\+00$", "\\1", x) # extract everything between ()
[1] "2018-01-02 06:40:00" "2018-01-02 06:50:00" "2018-01-02 07:00:00"
[4] "2018-01-02 07:10:00" "2018-01-02 07:20:00" "2018-01-02 07:30:00"

答案 1 :(得分:1)

您可以先将字符向量转换为POSIXct元素,然后将其转换回字符,从而解决此问题。

> test <- c("2018-01-02 06:40:00+00","2018-01-02 06:50:00+00","2018-01-02   07:00:00+00")
> test_date <- as.POSIXct(test, format = "%Y-%m-%d %H:%M:%S")
> test_char <- as.character(test_date)
> test_char
[1] "2018-01-02 06:40:00" "2018-01-02 06:50:00" "2018-01-02 07:00:00"

优点是您可以自由修改时间戳的语法:

> test_char_2 <- as.character(format(test_date, "%m/%d/%y %H:%M:%S"))
> test_char_2
[1] "01/02/18 06:40:00" "01/02/18 06:50:00" "01/02/18 07:00:00"
  

答案 2 :(得分:0)

如果字符数相同,只需使用 substr

A

或者使用 gsub fixed = TRUE

test <- c("2018-01-02 06:40:00+00", "2018-01-02 06:50:00+00", "2018-01-02 07:00:00+00")

nchar(test)
# [1] 22 22 22

substr(test, 1, 19)
# [1] "2018-01-02 06:40:00" "2018-01-02 06:50:00" "2018-01-02 07:00:00"