2015-03-15 15 views
9

У меня есть вектор «Time.Training» в формате часы: минуты: секунды (напримерR: Преобразовать часы: минуты: секунды

Time.Training<- c("1:00:00", "0:45:00", "0:30:00", "1:30:00") 

Я хотел бы преобразовать это в минуты в формате:

Time.Training.Minutes<-c(60, 45, 30, 90) 

мне интересно, если кто-то имеет простой способ сделать это в R.

Большое спасибо.

Matt

+1

Параметр ' Time.Training <- c (1:00:00, 0:45:00, 0:30:00, 1:30:00) 'не работает. вы можете использовать 'dput (Time.Training)'? – tospig

+0

Вектор Time.Training извлекается из Google Таблиц с использованием URL-адреса. Он входит в R в формате hh: mm: ss. Надеясь преобразовать это, я могу рассчитать тренировочную нагрузку для спортсмена, но мне нужно это за считанные минуты. –

+0

Кавычки - это то, что требовалось. – tospig

ответ

6

Вот некоторые варианты:

1) ЦО рон пакет имеет "times" класс, в котором 1 блок является день, и есть 60 * 24 минут в день, так:

library(chron) 
60 * 24 * as.numeric(times(Time.Training)) 

даяние:

[1] 60 45 30 90 

1a) Другой подход с использованием Chron является следующее (дает тот же ответ):

library(chron) 

ch <- times(Time.training) 
60 * hours(ch) + minutes(ch) 

2) Вот подход с использованием read.table и умножение матрицы/вектора. Не нужны никакие пакеты:

c(as.matrix(read.table(text = Time.Training, sep = ":")) %*% c(60, 1, 1/60)) 

(Использование "POSIXlt", вероятно, наиболее прямолинейный подход без пакетов, а другой ответ уже предусматривает, что.)

8

Попробуйте это. Мы в основном преобразование в POSIXlt класс первый вставив реальную дату вектора с помощью функции Sys.Date() (потому что нет часа класса в базовом R), а затем с помощью hour и min аргументов для того, чтобы достичь выходного

Res <- as.POSIXlt(paste(Sys.Date(), Time.Training)) 
Res$hour*60 + Res$min 
## [1] 60 45 30 90 
+0

Таблица данных называется «load», а переменная называется «Time.Spent.Training». Я использовал команды: attach (load), а затем Res <- as.POSIXlt (вставить (Sys.Date(), Time.Spent.Training)). Это дало вектор дат 2015-03-15. Я не могу получить время от этого –

+0

Вам нужно позвонить в свою колонку из своего набора данных. Попробуйте 'load $ Time.Spent.Training' instaed только' Time.Spent.Training'. –

4

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

Time.Training<- c("1:00:00", "0:45:00", "0:30:00", "1:30:00") 

library(lubridate) 
res <- hms(Time.Training)  # format to 'hours:minutes:seconds' 
hour(res)*60 + minute(res)  # convert hours to minutes, and add minutes 
## [1] 60 45 30 90 
+1

Это сработало. Точный код, который я использовал, - это библиотека (lubridate); res <- hms (load $ Time.Spent.Training); load $ Time.Minutes <-hour (res) * 60 + минута (res). Спасибо. –

+1

Добро пожаловать. На вашем примере, приведенном в вопросе, также работает метод Давида Аренбурга. Если вам нужны ответы на основе ваших фактических данных, вы должны рассмотреть возможность использования 'dput()' (по крайней мере, на подмножестве данных). – tospig

3

Использование as.difftime:

> Time.Training<- c("1:00:00", "0:45:00", "0:30:00", "1:30:00") 
> strtoi(as.difftime(Time.Training, format = "%H:%M:%S", units = "mins")) 
[1] 60 45 30 90