2015-11-19 2 views
3

Это может быть глупый вопрос, но я ничего не могу найти по этому поводу.R Программирование - преобразование числа в MM: SS

У меня есть числовое значение, которое представляет секунды. Как я могу преобразовать его в ММ: СС

Например

Мой номер 96

Представлял в ММ: СС должно быть 1:36.

Любая помощь приветствуется.

ответ

8

%/% (integer division) и %% (modulo) операторы являются вашими друзьями:

x <- 96 
paste(x %/% 60, x %% 60, sep = ":") 

, который дает

> paste(x %/% 60, x %% 60, sep = ":") 
[1] "1:36" 

Здесь она находится в функции :

d2ms <- function(x) { 
    paste(x %/% 60, x %% 60, sep = ":") 
} 

> xx <- c(120, 96, 45, 30) 
> d2ms(xx) 
[1] "2:0" "1:36" "0:45" "0:30" 

Что показывает, что нам нужна небольшая помощь, чтобы получить именно тот формат, который вам нужен; см ?sprint пути к форматирования чисел [как символы] с ведущими 0s и т.д.:

d2ms <- function(x) { 
    sprintf("%02d:%02d", x %/%60, x %% 60) 
} 

> d2ms(xx) 
[1] "02:00" "01:36" "00:45" "00:30" 

Обратите внимание, что : в строке выше является буквальным, то %xxy биты форматы для значений, указанных в следующих двух аргументов и включают в себя детали форматирования для числа нулей на площадку шаблон для этого использования здесь является (то есть площадки с нулями до тех пор, номер использует две цифры.):

%[flag][width]specifier,

где здесь мы использовали:

  • 0 как флаг --- площадку с 0 сек ширина была 2
  • , мы хотим ММ или СС
  • спецификатор был d для целых чисел (также может быть i)

ли вам это нужно или нет до вашего конечного варианта использования.

Эти операторы весьма полезны для такого рода операций; другой пример - преобразование из градусов, минут, секундных обозначений в десятичные градусы для пространственных координат.

+2

Я не останавливался с обвинениями; Я представил свой ответ, понял, что это не на 100% точно то, что хотел OP, так что это логичная штука и спринт-вывод. 'sprintf()' вряд ли так странно является загадочной частью R или вычисляет для вывода строк, что невозможно, чтобы у двух людей появилось одно и то же решение. –

+0

На самом деле я не даю фига, если с ним все в порядке или нет; Я не копировал ваш ответ (мы все еще учимся в школе?), Я просто понял, как я представил ответ, что это было не совсем правильно, и приступил к исправлению этого незначительного момента. –

+0

Хорошо, я сформулировал это очень плохо. Я должен был просто сказать: «Эй, твое редактирование - это в основном мой ответ» или что-то вообще. Я удалил свои комментарии. Извините за то, что он был груб. На самом деле не думайте, что вы добровольно скопировали мой ответ, конечно. Был просто удивлен, увидев, что мой ответ реплицирован и прокомментирован, не так много думая. Надеюсь, это немного разъяснит. – nicola

Смежные вопросы