Извлечение времени из середины строки в R при изменении строки c - PullRequest
2 голосов
/ 27 марта 2020

У меня есть набор данных, содержащий тренировочные данные для нескольких спортсменов в разные дни / времена. Один столбец содержит дату и время начала сеанса. Я только wi sh, чтобы сохранить время начала в этом столбце, т.е. я хочу удалить "2020/01/05" и "UT C". Как мне удалить все до и после времени (есть 4 миллиона строк с разными датами / временем).

 start.time
1 2020/01/05 21:30:04 UTC 
2 2020/01/05 21:30:04 UTC 
3 2020/01/05 21:30:04 UTC 
4 2020/01/05 21:30:04 UTC 
5 2020/01/05 21:30:04 UTC 
6 2020/01/05 21:30:04 UTC 

Извините, вероятно, где-то уже был дан ответ.

Спасибо

Ответы [ 2 ]

1 голос
/ 27 марта 2020

Несколько способов сделать это:

1) Использование регулярного выражения

df$time <- sub('.*\\s+(.*) UTC', '\\1', df$start.time)
df
#               start.time     time
#1 2020/01/05 21:30:04 UTC 21:30:04
#2 2020/01/05 21:30:04 UTC 21:30:04
#3 2020/01/05 21:30:04 UTC 21:30:04
#4 2020/01/05 21:30:04 UTC 21:30:04
#5 2020/01/05 21:30:04 UTC 21:30:04
#6 2020/01/05 21:30:04 UTC 21:30:04

Здесь мы фиксируем все между пробелами и "UTC". \\1 используется как обратная ссылка для захвата извлеченного значения.


2) Преобразовать в POSIXct, а затем format

Это можно сделать в базе R:

format(as.POSIXct(df$start.time, format = "%Y/%m/%d %T"), "%T")

Или с использованием lubridate

format(lubridate::ymd_hms(df$start.time), "%T")

данные

df <- structure(list(start.time = structure(c(1L, 1L, 1L, 1L, 1L, 1L
), .Label = "2020/01/05 21:30:04 UTC", class = "factor")), 
class = "data.frame", row.names = c(NA,-6L))
0 голосов
/ 27 марта 2020

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

library(anytime)
format(anytime(df$start.time), "%T")

Или с as.ITime

library(data.table)
as.ITime(df$start.time)
#[1] "21:30:04" "21:30:04" "21:30:04" "21:30:04" "21:30:04" "21:30:04"

data

df <- structure(list(start.time = structure(c(1L, 1L, 1L, 1L, 1L, 1L
), .Label = "2020/01/05 21:30:04 UTC", class = "factor")), 
class = "data.frame", row.names = c(NA,-6L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...