преобразовать число 123, которое является временем 1:23, в мс

Я читаю таблицу Excel в фрейме данных. Время было закодировано как число без знаков препинания, поэтому 123 означает 1:23 (1 минута и 23 секунды), 23 означает 23 секунды, 524 означает 5:24 и т. д.

Итак, это число является столбцом во фрейме данных. Я хочу рассчитать новый столбец, который преобразует эти числа в миллисекунды. Я пробовал кучу разных вещей, например, эту функцию:

# function to convert time into msecseconds
toMSec <- function(x){
a = as.numeric(str_sub(as.character(x), -2, -1))*1000
b = as.numeric(str_sub(as.character(x), -4, -3))*1000*60
if (any(is.na(b))){ b = 0}
y = a+b

# return the correct number of msec
return(y)

}

Но часть b функции терпит неудачу, и я просто получаю ответ для части секунд. Кажется, у меня возникла проблема с необходимостью иметь векторизованный ответ, поэтому я могу применить функцию ко всему столбцу чисел.


person Ken Leslie    schedule 22.03.2018    source источник


Ответы (1)


Если я правильно понимаю то, о чем вы просите:

toMSec<- function(x) (x%/%100*60+x%%100)*1000

Объяснение: toMSec берет число mmss, использует %/% (частное) для получения минут, умножает на 60, чтобы получить секунды, и добавляет к этому остаток (%% - по модулю), чтобы получить секунды. Все это умножается на 1000, чтобы получить миллисекунды.

person iod    schedule 22.03.2018