Нужна помощь в удалении шаблона времени из даты в R - PullRequest
0 голосов
/ 14 июня 2019

Я хочу просто избавиться от отметки времени в моем столбце даты.

Использование gsub в R. Не могу понять, какой шаблон использовать.

"2019-04-03T20:31:47Z"

Надеюсь на помощь. Это не сработало до сих пор:

gsub("T[:digit:]$", "", week0_album$created)

Ответы [ 5 ]

5 голосов
/ 14 июня 2019

Мы можем использовать anydate от anytime

library(anytime)
anydate(str1)
#[1] "2019-04-03"

данные

str1 <- "2019-04-03T20:31:47Z"
3 голосов
/ 14 июня 2019

Не нужно использовать gsub, только функция as.Date из base решит ее.

as.Date("2019-04-03T20:31:47Z")
2 голосов
/ 14 июня 2019

Вы также можете использовать пакет lubridate:

library(lubridate)

str <- "2019-04-03T20:31:47Z"
date(str)

# [1] "2019-04-03"
1 голос
/ 14 июня 2019

Есть много способов сделать это.Формат "2019-04-03T20:31:47Z" заставляет меня думать, что эти даты взяты из какого-либо файла с разделителями (CSV, TSV), поэтому лучше всего импортировать их, используя правильный тип данных:

# An example string.
s <- "2019-04-03T20:31:47Z"

# Use `colClasses` to use correct data type on import.
read.csv(text = s, header = F, col.names = "dates", colClasses = "Date")

#### OUTPUT ####

        date
1 2019-04-03

Вы также можете использовать регулярные выражения, но чего-то более простого будет достаточно.Вы действительно просто хотите удалить все после T, поэтому:

sub("T.*", "", s)

Но даты более полезны как Date объекты, поэтому я бы порекомендовал преобразовать ваши строки.Вы можете вызвать as.Date в приведенной выше строке после sub bing, но as.Date также довольно хорошо работает в одиночку (Другие дали этот ответ. Я просто включил его для полноты и потому, что я думаю,это лучшая практика, чем просто sub bing и использование даты в качестве строки символов.) :

as.Date(s)
1 голос
/ 14 июня 2019

Или, если вы настаиваете на том, чтобы сохранить его базовым и символом, это регулярное выражение поможет:

chr <- "2019-04-03T20:31:47Z"
gsub("T[[:digit:]:]{8}Z$", "", chr)
#> [1] "2019-04-03"
...