#r #readr
Вопрос:
Я пытаюсь проанализировать строку, представляющую период, состоящий из минут, секунд и миллисекунд. Мои предпочтительные функции для этого были бы взяты из readr
пакета, где секунды и миллисекунды могут рассматриваться совместно как частичные секунды. По-видимому, в этом пакете есть молчаливое предположение, что минуты представлены в виде двух цифр, т. е. дополнены нулями.
readr::parse_time("1:23.456", format="%M:%OS") # doesn't work
readr::parse_time("01:23.456", format="%M:%OS") # works
ms
Функция from lubridate
обрабатывает это прямо из коробки:
lubridate::ms("1:23.456")
Есть ли обходной путь для этого, чтобы я мог использовать parse_time
и другие функции, readr
не прибегая к заполнению нулями самостоятельно?
Ответ №1:
Спецификации формата можно посмотреть здесь: https://stat.ethz.ch/R-manual/R-devel/library/base/html/strptime.html и https://readr.tidyverse.org/reference/parse_datetime.html
Проблема здесь в том, что %M
относится к времени, показанному в минутах между "00"
и "99"
. Обратите внимание, что это точная спецификация, которую вы передали, поэтому она является частью указанного формата, а не предположением о пакете. Насколько мне известно, нет аргумента минут, который принимает различные длины строк, которые могут быть переданы в столбец формат. (Это отличается от аргумента day, который принимает один символ).
Функция ms Lubridate использует другой метод для анализа временных строк. Функция Lubridate гораздо более надежна из-за возможности обрабатывать множество форматов, включая тот, который указан в вопросе, когда формат не задан.